首页 > 解决方案 > 如何创建一个新列来跟踪数据框中两列之间的任何更改?

问题描述

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

标签: pythonpython-3.xpandasdataframe

解决方案


我认为您正在寻找的是布尔运算符,如果有任何操作数是OR,它会给出。使用 pandas 系列,您可以像这样使用它:TrueTrue

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

希望能帮助到你。


推荐阅读