首页 > 解决方案 > Pandas Dataframe:如何比较一行中两列中的值是否等于后续行相同列中的值?

问题描述

假设我有一个这样的数据框

Fruit  Color  Weight
apple   red    50
apple   red    75
apple  green   45
orange orange  80
orange orange  90
orange  red    90

我想根据第 x 行的水果和颜色等于第 x+1 行的水果和颜色的事实添加一个具有 True 或 False 的列,如下所示:

Fruit  Color  Weight Validity
apple   red    50      True
apple   red    75      False
apple  green   45      False
orange orange  80      True
orange orange  90      False
orange  red    90      False

我尝试了以下方法,但我猜有一些错误,我得到了错误的结果:

g['Validity'] = (g[['Fruit', 'Color']] == g[['Fruit', 'Color']].shift()).any(axis=1) 

标签: pythonpandas

解决方案


您对移位比较有正确的想法,但是您需要向后移位,以便将当前行与下一行进行比较。最后使用一个all条件来强制所有列在一行中相等:

df['Validity'] = df[['Fruit', 'Color']].eq(df[['Fruit', 'Color']].shift(-1)).all(axis=1)

df
    Fruit   Color  Weight  Validity
0   apple     red      50      True
1   apple     red      75     False
2   apple   green      45     False
3  orange  orange      80      True
4  orange  orange      90     False
5  orange     red      90     False

推荐阅读