python - 如何创建一个新列来跟踪数据框中两列之间的任何更改?
问题描述
我正在使用 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 值?(即,假,假-->假)
解决方案
我认为您正在寻找的是布尔运算符,如果有任何操作数是OR
,它会给出。使用 pandas 系列,您可以像这样使用它: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']
希望能帮助到你。
推荐阅读
- html - 更改 HTML 输入中的占位符值
- javascript - 移动浏览器上的画布不是全屏的
- javascript - 使用 javascript 将查询参数传递给嵌入的 iframe
- swift - 在社交媒体上分享图像
- python - 在 Sci-kit 中计算 K-Fold CV 的平均 R-Squared 分数
- java - 使用 DSS(数字签名服务)对哈希进行签名
- django - 简单的应用程序,但每个组中有不同的任务(多对一关系)
- c - 将每个单词的首字母大写的程序
- javascript - 如何翻译 Highcharts Gantt 工具提示中的“开始”和“结束”标签?
- javascript - 如果导航选项卡上的日历,事件会严重呈现