Python 比较数据库中的两行

Python 比较数据库中的两行,python,pandas,compare,row,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

我有一个这样的数据帧

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中迭代。如果有差异,我想写下正确的,如果不是错误的

    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']

通过fillna将“不等于”的移位值与“替换第一个值”的原始列1进行比较:

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

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

通过fillna将“不等于”的移位值与“替换第一个值”的原始列1进行比较:

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

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

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

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

当第4列中的值为真时,上行将给出第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()

当第4列中的值为True时,上行将给出第1列中的值列表。

我没有像香蕉一样的常量值。价值观在变化,比如:香蕉、苹果、菠萝。我应该使用for循环吗?@CanerUçal-如果性能很重要,最好不要使用循环。添加了矢量化解决方案来回答问题。当我使用.shift方法时,最后一行比较消失了。@CanerUçal-在我的解决方案中,第一个值消失了-它被原始值替换为.fillnadf.Column1,所以如果“不等于ne的比较”是第一个值,那么对不起,我是python新手。我现在明白了。它起作用了。非常感谢。我没有像香蕉一样的常数。价值观在变化,比如:香蕉、苹果、菠萝。我应该使用for循环吗?@CanerUçal-如果性能很重要,最好不要使用循环。添加了矢量化解决方案来回答问题。当我使用.shift方法时,最后一行比较消失了。@CanerUçal-在我的解决方案中,第一个值消失了-它被原始值替换为.fillnadf.Column1,所以如果“不等于ne的比较”是第一个值,那么对不起,我是python新手。我现在明白了。它起作用了。非常感谢。谢谢你的评论。它也有效。谢谢你的评论。它也起作用。