Pandas 比较数据库中的两行
Pandas comparing two rows in a database
我有一个这样的数据框;
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']
比较移位后的值是否不等于将第一个值替换为原始值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']
如果我正确理解你的问题,这应该有效:
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()
当 Column4
中的值为 True
.
时,上面的行将给出 Column1
中的值列表
我有一个这样的数据框;
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']
比较移位后的值是否不等于将第一个值替换为原始值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']
如果我正确理解你的问题,这应该有效:
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()
当 Column4
中的值为 True
.
Column1
中的值列表