如何创建新列来跟踪数据帧中两列之间的任何更改?



我正在使用熊猫比较两个 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 的值?(即,假,假-->假)

我认为您要查找的是布尔运算符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']

希望对您有所帮助。

最新更新