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新手。我现在明白了。它起作用了。非常感谢。谢谢你的评论。它也有效。谢谢你的评论。它也起作用。