如何用Pandas查找同一ID(A列)下的字段变更(忽略E列)?
问题描述
现有如下Pandas DataFrame:
# | A | B | C | D | E --+-------+-------+-------+-------+------- 1 | "5" | "4" | "2" | "3" | "2022-11-29" | 2 | "5" | "d" | "2" | "3" | "2022-11-30" | 3 | "5" | "4" | "2" | "h" | "2022-11-29" | 4 | "4" | "4" | "2" | "3" | "2022-11-28" | 5 | "4" | "4" | "g" | "3" | "2022-11-29" |
需要查找同一ID(A列)下的字段变更情况,但忽略E列的变动。期望结果如下:
ID 5 changed in column B (changedTovalue "d") and column D (changedTovalue "h") ID 4 changed in column C (changedTovalue "g")
请问能否通过Pandas实现该需求?
可以实现,具体步骤及代码如下:
1. 数据准备与分组处理
先把表格转换成标准DataFrame,再按A列分组,以每组第一行数据为基准,找出其他行中与基准值不同的字段(忽略E列),收集变更的列和对应值。
2. 完整代码示例
import pandas as pd # 构建目标DataFrame data = { 'A': ['5', '5', '5', '4', '4'], 'B': ['4', 'd', '4', '4', '4'], 'C': ['2', '2', '2', '2', 'g'], 'D': ['3', '3', 'h', '3', '3'], 'E': ['2022-11-29', '2022-11-30', '2022-11-29', '2022-11-28', '2022-11-29'] } df = pd.DataFrame(data) # 处理单个分组的函数:找出与基准值不同的字段 def extract_changes(group): # 取分组第一行作为基准(排除E列) base_vals = group.iloc[0].drop('E') change_records = {} # 遍历分组内每一行,对比基准值 for _, row in group.iterrows(): current_vals = row.drop('E') # 找出当前行与基准值不同的列 diff_cols = current_vals[current_vals != base_vals].index for col in diff_cols: # 只记录首次出现的变更值,避免重复 if col not in change_records: change_records[col] = current_vals[col] return change_records # 按A列分组并提取变更信息 change_results = df.groupby('A').apply(extract_changes) # 生成指定格式的输出文本 for id_val, changes in change_results.items(): if changes: # 整理每个变更项的描述字符串 change_strs = [f'column {col} (changedTovalue "{val}")' for col, val in changes.items()] # 处理多个变更的连接格式 if len(change_strs) > 1: final_desc = ' and '.join([', '.join(change_strs[:-1]), change_strs[-1]]) else: final_desc = change_strs[0] print(f'ID {id_val} changed in {final_desc}')
3. 运行结果
ID 4 changed in column C (changedTovalue "g") ID 5 changed in column B (changedTovalue "d") and column D (changedTovalue "h")
补充说明
- 代码默认以分组内第一行数据作为基准,如果需要以最新时间(E列)的行作为基准,可以先对每个分组按E列排序后再取基准值
- 如果需要记录同一列的所有变更值,可修改逻辑去掉“避免重复”的判断,收集所有不同值
内容的提问来源于stack exchange,提问作者Dmitrij Holkin
相关产品推荐
相关产品推荐

