如何比较 2 个数据帧列并根据结果向新数据帧添加值



我有 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

由于类是 0 和 1,你可以尝试,

df1[0].lt(df2[0]).astype(int)

对于通用解决方案,请查看 Jezrael 的答案。

试试这个:

>>> import numpy as np
>>> import pandas as pd
>>> df_1
0  class
0  1.9      0
1  9.8      0
2  4.5      0
3  8.1      0
4  1.9      0
>>> df_2
0  class
0  1.4      1
1  7.8      1
2  8.5      1
3  9.1      1
4  3.9      1
>>> df_3=pd.DataFrame()
>>> df_3["class"]=np.where(df_1["0"]>df_2["0"], df_1["class"], df_2["class"])
>>> df_3
class
0      0
1      0
2      1
3      1
4      1

相关内容

  • 没有找到相关文章

最新更新