比较>和<在pandas中2个数据帧的值之间

时间:2017-02-16 03:22:07

标签: python-3.x pandas

我有两个数据帧,如df1& DF2

 df1                  df2
 A  10                A 7
 B  1500              B 1100
 C  5                 C 10
 D  100               D 60

现在我需要编写代码来比较每个df1 ['A']而不是“>”或“<”用df2 ['A'] 等等。有人建议写入比较的函数并返回更大的值而不是任何布尔结果。

1 个答案:

答案 0 :(得分:0)

如果我理解正确:你想要一个返回数据帧(df3)的函数df3.iloc[i] == max(df1.iloc[i], df2.iloc[i])

可能有一种更简单的方法,但这里有用的东西:

s1 = pd.Series((10, 1500, 5, 100), index=['A', 'B', 'C', 'D'])
s2 = pd.Series((7, 1100, 10, 60), index=['A', 'B', 'C', 'D'])
s3 = pd.concat((s1[s1 > s2], s2[s2 > s1]), axis=0)
s3
A      10
B    1500
D     100
C      10

当你调用s1[s1 > s2]时,它会返回s1的所有元素,这些元素大于s2的相应元素(同样适用于s2[s2 > s1])。然后你只需将这两个连接在一起; axis = 0表示按行进行。

确实使您的索引无序。如果需要,您可以通过以下方式对其进行排序:

s3.sort_index()
A      10
B    1500
C      10
D     100

@ unutbu的答案(在他对OP的问题的评论中链接)可能更直接:

df_3 = df_1.where(df_1 > df_2, df_2)

当条件成立时(值更大),返回df_1中的值,否则返回df_2中的值。

(这似乎与他链接的问题重复,但这里的标题可能更容易在Google搜索此任务中找到?像“Elementand<(大于)Pandas DataFrames”之类的东西也可能顺利)