Pandas比较特定的行

2024-03-28 10:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框架,由两列winner和newcol2组成。两列都包含变量white black和draw。我想比较列中的每一行。例如,如果winner:white和newcol2:black返回1

  winner    newcol2
0  white     black
1  black     white
2  white     white
3  draw      white
4  black     draw

conditions1 = [
(x['winner'] == 'white'),
(x['winner'] == 'draw'), 
(x['winner'] == 'black')]
conditions2 = [
(x['newcol2'] == 'white'),
(x['newcol2'] == 'draw'),
(x['newcol2'] == 'black')]

x['result'] = np.select(conditions1, conditions2, default='null')

我试图用下面的代码来解决我的问题,但是对于相等和不相等的变量,我得到了true和false


Tags: 数据框架defaultnpresultselectnullblack
2条回答

除了您给出的示例之外,我不确定您的所有条件是什么,但这将起作用:

In [23]: conditions = []


In [24]: for row in df.itertuples(): 
...:     if row.winner == 'white' and row.newcol2 == 'black': 
...:         conditions.append(1) 
...:     elif row.winner == 'black' and row.newcol2 == 'white': 
...:         conditions.append(1) 
...:     else: 
...:         conditions.append(0) 
...:                                                                        

In [25]: conditions                                                             
Out[25]: [1, 1, 0, 0, 0]

In [26]: df['conditions'] = conditions                                          

In [27]: df                                                                     
Out[27]: 
  winner newcol2  conditions
0  white   black           1
1  black   white           1
2  white   white           0
3   draw   white           0
4  black    draw           0

您可以根据任何条件修改代码

据我所知,您希望为数据帧中两列的每个唯一组合分配一个值

如果数据帧中没有所有的组合,您可以使用这种方法创建带有代码的dict,或者使用itertools生成dict

combs = set(zip(df['winner'], df['newcol2']))
codes = dict(zip(combs, range(len(combs))))

使用“应用”方法将两列中的组合替换为编码值:

df['result'] = df.apply(lambda x: codes[x['winner'], x['newcol2']], axis=1)

相关问题 更多 >