使用Python拆分聚合值至独立行并实现数据透视需求
解决方案
要实现将聚合值拆分到独立行并完成透视,分三步处理即可:
1. 宽表转窄表
先把多日期列的宽表转换成包含计数的窄表,保留ID、type、日期和对应数值:
import pandas as pd import numpy as np # 假设原始数据已加载到df变量中 df_long = df.melt(id_vars=['ID', 'type'], var_name='date', value_name='count') # 偏好janitor的话也可以这么写: # df_long = df.pivot_longer(index=['ID', 'type'], names_to='date', values_to='count', sort_by_appearance=True)
2. 过滤无效记录
直接去掉计数为0的行,这些不需要生成对应记录:
df_filtered = df_long[df_long['count'] > 0]
3. 根据计数值重复行
用numpy.repeat高效生成重复行,最后清理多余列并重置索引:
df_result = df_filtered.loc[np.repeat(df_filtered.index, df_filtered['count'])] df_result = df_result.drop('count', axis=1).reset_index(drop=True)
原代码问题说明
你之前的pivot_longer存在两个问题:
names_pattern用了下划线匹配的正则,但原列名是空格分隔(比如Q1 24),正则不匹配;- 只指定
ID作为索引,没包含type,导致无法关联类型和对应计数。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

