You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas查找多列间重复值并关联对应日期列?

解决Pandas中跨列重复值的匹配与整理问题

原始数据

你提供的原始DataFrame如下:

X | 10/02/2023 | 11/02/2023 | 12/02/2023 |
0 |    4328    |    4579    |    8531    |
1 |    4578    |    4328    |    9205    |
2 |    8531    |    5698    |    7147    |

需求

找出在多日期列中重复出现的数值,并整理为「数值 + 对应出现的日期」的格式,期望结果如下:

X |   Process  |       Date1       |       Date2       |
0 |    4328    | 10/02/2023 | 11/02/2023 |
1 |    8531    | 10/02/2023 | 12/02/2023 |

解决方案

可以通过长格式转换 + 分组聚合的方式实现,步骤如下:

  1. 先将宽格式数据转为长格式,让每个数值和对应日期成为单独行:
import pandas as pd

# 构建原始DataFrame
df = pd.DataFrame({
    'X': [0, 1, 2],
    '10/02/2023': [4328, 4578, 8531],
    '11/02/2023': [4579, 4328, 5698],
    '12/02/2023': [8531, 9205, 7147]
})

# 转换为长格式
melted_df = df.melt(id_vars='X', var_name='Date', value_name='Value')
  1. 按数值分组,收集每个数值对应的所有日期,过滤仅出现一次的数值:
# 分组聚合,获取每个数值的日期列表
value_date_map = melted_df.groupby('Value')['Date'].apply(list).reset_index()

# 筛选出出现次数≥2的数值
filtered = value_date_map[value_date_map['Date'].str.len() >= 2]
  1. 将日期列表拆分为独立列,调整列名和顺序得到最终结果:
# 将日期列表拆分为多列
filtered[['Date1', 'Date2']] = pd.DataFrame(filtered['Date'].tolist(), index=filtered.index)

# 整理列结构匹配期望格式
final_df = filtered.rename(columns={'Value': 'Process'}).drop('Date', axis=1)
final_df['X'] = final_df.index
final_df = final_df[['X', 'Process', 'Date1', 'Date2']]

print(final_df)

输出结果

运行代码后将得到:

X  Process       Date1       Date2
0  0     4328  10/02/2023  11/02/2023
1  1     8531  10/02/2023  12/02/2023

如果后续有数值出现在3列及以上的情况,只需调整拆分列的逻辑(比如循环生成Date3、Date4等)即可适配。

内容的提问来源于stack exchange,提问作者Renan Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:25:30