【问题标题】:How can I create a new column to track any changes between two columns in a dataframe?如何创建一个新列来跟踪数据框中两列之间的任何更改?
【发布时间】:2019-06-18 21:32:37
【问题描述】:

我正在使用 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”列值:

正确
真的
假的

如果颜色和长度值都发生了变化,如何让 pandas 在“master_change”列中给我一个 False 值? (即,假,假-->假)

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

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

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

    希望对你有帮助。

    【讨论】:

    • 啊,“&”和“|”符号是我所缺少的!我在终端里玩弄诸如“真假”和“假真假”之类的东西,但不知道如何在 pandas 中使用“and”。这完全符合我的要求,非常感谢!
    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多