我有 2 个相同长度的数据框,我想比较它们之间的特定列。如果其中一个数据帧中第一列的值更大 - 我希望它采用第二列中的值并将其分配给新的数据帧。
参见示例。第一个数据框:

       0   class
0    1.9       0
1    9.8       0
2    4.5       0
3    8.1       0
4    1.9       0

第二个数据框:
       0   class
0    1.4       1
1    7.8       1
2    8.5       1
3    9.1       1
4    3.9       1

新数据框应如下所示:
  class
0     0
1     0
2     1
3     1
4     1

最佳答案

numpy.where DataFrame 构造函数一起使用:

df = pd.DataFrame({'class': np.where(df1[0] > df2[0], df1['class'], df2['class'])})

DataFrame.where :
df = df1[['class']].where(df1[0] > df2[0], df2[['class']])
print (df)
   class
0      0
1      0
2      1
3      1
4      1

编辑:

如果有其他条件,请使用 numpy.select ,如有必要,请使用 numpy.isclose
print (df2)
     0  class
0  1.4      1
1  7.8      1
2  8.5      1
3  9.1      1
4  1.9      1


masks = [df1[0] == df2[0], df1[0] > df2[0]]
#if need compare floats in some accuracy
#masks = [np.isclose(df1[0], df2[0]), df1[0] > df2[0]]
vals = ['not_determined', df1['class']]
df = pd.DataFrame({'class': np.select(masks, vals, df2['class'])})
print (df)
            class
0               0
1               0
2               1
3               1
4  not_determined

或者:
masks = [df1[0] == df2[0], df1[0] > df2[0]]
vals = ['not_determined', 1]
df = pd.DataFrame({'class': np.select(masks, vals, 1)})
print (df)
            class
0               0
1               0
2               1
3               1
4  not_determined

开箱即用的解决方法:
df = np.sign(df1[0].sub(df2[0])).map({1:0, -1:1, 0:'not_determined'}).to_frame('class')
print (df)
            class
0               0
1               0
2               1
3               1
4  not_determined

关于pandas - 如何比较 2 个数据帧列并根据结果向新数据帧添加值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57710476/

10-14 14:04
查看更多