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

Python pandas拆分Members列并统计各成员首次及末次出现日期

问题原因分析
  1. 拆分得到全NaN的核心原因:你的Members列存储的是带方括号的字符串格式列表,不是原生Python列表,拆分前没有先处理掉首尾的[、]符号,同时部分成员前后带空格,也会影响拆分结果;另外如果Members列的数据类型不是字符串,也会导致str类方法失效返回NaN。
  2. 你当前的写法会直接覆盖原df,丢失Date列,后续无法统计成员的出现日期。
完整实现步骤

按照以下代码执行即可得到你要的结果:

  • 第一步:预处理Members列,清洗无效符号
import pandas as pd

# 确保Members列是字符串类型,去掉首尾的方括号
df['Members'] = df['Members'].astype(str).str.strip('[]')
# 按逗号拆分,同时去除每个成员前后的多余空格,得到列表格式
df['Members'] = df['Members'].str.split(',').apply(lambda x: [item.strip() for item in x])
  • 第二步:将每行的成员列表展开为多行,每个成员单独占一行
# explode方法实现列表展开,保留对应日期
df_explode = df.explode('Members', ignore_index=True)
  • 第三步:按成员分组聚合,统计首次和末次出现日期
# 先将Date列转为日期格式,保证统计准确
df_explode['Date'] = pd.to_datetime(df_explode['Date'])
# 分组统计最小日期(首次)和最大日期(末次)
result = df_explode.groupby('Members', as_index=False).agg(
    首次出现日期=('Date', 'min'),
    末次出现日期=('Date', 'max')
)
# 若需要输出为字符串格式日期,可加下面这行代码
result[['首次出现日期', '末次出现日期']] = result[['首次出现日期', '末次出现日期']].apply(lambda col: col.dt.strftime('%Y-%m-%d'))
结果示例

以你提供的测试数据运行后,输出的result结构如下:

Members首次出现日期末次出现日期
CHRW.OQ2009-01-302009-03-30
AJG.N2009-01-302009-03-30
CNP.N2009-01-302009-03-30
其余成员以此类推......

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:03