熊猫比较数据库中的两行

时间:2021-06-04 09:02:53

标签: python pandas compare row

我有一个这样的数据框;

df = pd.DataFrame(np.array([['apple', 'golden', 3], ['apple', 'green', 6], ['banana', 'golden', 9], ['apple', 'golden', 5], ['apple', 'green', 6], ['banana', 'golden', 6]]),
                   columns=['Column1', 'Column2', 'Column3'])
df

    Column1 Column2 Column3
0   apple   golden  3
1   apple   green   6
2   banana  golden  9
3   apple   golden  5
4   apple   green   6
5   banana  golden  6

我想将“Column1”行与在新的 Column4 中迭代进行比较。如果有差异,我想写下 True,如果不是 False。

    Column1 Column2 Column3 Column4
0   apple   golden  3       False
1   apple   green   6       False
2   banana  golden  9       True
3   apple   golden  5       True
4   apple   green   6       False
5   banana  golden  6       True

最后,如果比较结果为真,我想将 Column1 项添加到列表中。

list = ['banana']

2 个答案:

答案 0 :(得分:1)

比较不等于的移位值,并用 Column1 替换第一个值到原始 fillna

df['Column4'] = df.Column1.shift().fillna(df.Column1).ne(df.Column1)

print (df)
  Column1 Column2  Column3  Column4
0   apple  golden        3    False
1   apple   green        6    False
2  banana  golden        9     True
3   apple  golden        5     True
4   apple   green        6    False
5  banana  golden        6     True

对于列表不要使用list,因为python代码字:

L = df.loc[df['Column4'], 'Column1'].unique().tolist()
print (L)
['banana', 'apple']

答案 1 :(得分:1)

如果我正确理解您的问题,这应该可行:

df['Column4'] = np.where(df.Column1.shift(1) != df.Column1, True, False)
df['Column4'][0] = False  #Since the above method would set the first row as True comparing it to nothing


list = df['Column1'].loc[df.Column4].to_list()

Column1 中的值为 Column4 时,上面的行将给出 True 中的值列表。