我正在使用熊猫比较两个Excel文件,并监视某些列以标识所做的任何更改。当前,我正在创建一个布尔列,以查看df1中的A列是否等于df2中的A列,这为我提供了一个新的True / False值列。对于新数据帧和旧数据帧中的B列,我都做相同的事情。我在创建“主要更改”列时遇到麻烦,该列将告诉我是否在我检查的两个列中的一个或两个列中进行了更改。
现在,我的“主更改”列将检查布尔列是否检查A和B相等。如果仅1列有更改(ColA = True,ColB = False),则我的“主更改列”正确地将其标记为False,因此以后我可以将其标识为需要更新的行。 但是,当两个列都发生更改时(ColA = False,ColB = False),我的“主更改”列将该行标记为True,这与预期的一样。
old_data = [[1, 'red', 'short'], [2, 'blue', 'medium'],[3, 'green', 'long']]
new_data = [[1, 'red', 'short'], [2, 'green', 'long'],[3, 'green', 'short']]
df1 = pd.DataFrame(old_data, columns=['ID_num', 'original_color', 'original_length'])
df2 = pd.DataFrame(new_data, columns=['ID_num', 'current_color', 'current_length'])
df_combined = pd.merge(df1, df2, on='ID_num', how='left')
df_combined['color_change'] = df_combined['current_color'] == df_combined['original_color']
df_combined['length_change'] = df_combined['current_length'] == df_combined['original_length']
df_combined['master_change'] = df_combined['color_change'] == df_combined['length_change']
df_combined['master_change']
这为我提供了一个“ master_change”列值:
真实
是的
错误
如果颜色和长度值都已更改,如何在“ master_change”列中让熊猫给我一个False值? (即False,False-> False)
答案 0 :(得分:0)
我认为您要查找的是布尔运算符OR
,如果任何操作数为True
,则布尔运算符True
都会给出。在熊猫系列中,您可以像这样使用它:
df_combined['master_change'] = df_combined['color_change'] | df_combined['length_change']
如果仅当列均为True
时才希望列为True
,则可以使用AND
运算符:
df_combined['master_change'] = df_combined['color_change'] & df_combined['length_change']
希望有帮助。