Dataframe:如何比较一行中两列中的值与后续行中相同列中的值?

2024-05-13 18:00:06 发布

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

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

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) 


Tags: 数据falsetrueapple颜色错误greenred
3条回答

关于移位比较,您的想法是正确的,但是您需要向后移位,以便将当前行与下一行进行比较。最后,使用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

与其他答案类似:

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

>>> print(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

另一种选择:

subset_df = df[['Fruit','Color']].apply(''.join, axis=1)
df['Validity'] = np.where(subset_df == subset_df.shift(-1), True,False)

相关问题 更多 >