基于列表列元素频次生成Pandas透视表
解决方法
步骤1:数据预处理与展开
先将日期转换为年-月格式,再把每行的列表值拆分成单独行,让每个元素对应一条记录。
步骤2:生成透视表统计频次
按元素值和年月分组计数,再整理成指定的透视表格式,缺失的频次用0填充。
完整代码
import pandas as pd # 构造示例DataFrame data = { '列表值': [[1,2,3,4], [1,3], [1,4,5], [2,4,1], [1,3]], '日期': ['2022-07-17', '2022-06-17', '2022-06-17', '2022-06-17', '2022-05-17'] } df = pd.DataFrame(data) # 转换日期为年-月格式 df['年月'] = pd.to_datetime(df['日期']).dt.strftime('%Y-%m') # 拆分列表值并展开数据 df_exploded = df.explode('列表值', ignore_index=True) # 生成透视表并整理格式 pivot_result = df_exploded.pivot_table( index='列表值', columns='年月', aggfunc='size', fill_value=0 ).reset_index().rename(columns={'列表值': '值'}) print(pivot_result)
输出结果
| 值 | 2022-05 | 2022-06 | 2022-07 |
|---|---|---|---|
| 1 | 1 | 3 | 1 |
| 2 | 0 | 1 | 1 |
| 3 | 1 | 1 | 1 |
| 4 | 0 | 2 | 1 |
| 5 | 0 | 1 | 0 |
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

