Pandas Series属性丢失:如何将Series列表转为实用统计DataFrame?
问题解答
核心问题原因
你遇到的问题根源在于value_counts()方法的默认行为:它返回的Series会自动将name属性设为'count',覆盖了原列的名称。而你之前只是把这些Series追加到列表中,没有将原时段名称(即列名)与统计结果绑定,导致转DataFrame时丢失了关键的时段标识。
解决思路与代码
不需要依赖attrs,原时段名称就在你遍历的col变量里,直接提取并绑定到统计结果即可。正确的做法是将每个时段的统计结果重命名为对应的时段名称,再合并成目标DataFrame:
import pandas as pd # 假设data是你的原始DataFrame stats_dict = {} for col in data.columns: if 'Fill in today' in col: # 从列名中提取时段名称(根据你的实际列名格式调整,这里示例拆分取最后一段) period_name = col.split(' ')[-1] # 执行统计并将结果Series重命名为时段名称 count_series = data[col].explode().value_counts(dropna=False).rename(period_name) stats_dict[period_name] = count_series # 按列合并所有统计结果,缺失值填充为0(表示该时段无对应活动项) result_df = pd.concat(stats_dict.values(), axis=1).fillna(0)
关键知识点补充
value_counts()返回的Series默认name为'count',这是设计上的默认行为,用于标识计数列的含义,但会覆盖原Series的名称。- 合并多个Series时,使用
pd.concat并指定axis=1,会将每个Series的name作为DataFrame的列名,这正是你需要的时段标识。 - 用字典存储每个时段的统计结果,能更清晰地关联时段名称与对应数据,避免列表方式的信息丢失。
内容的提问来源于stack exchange,提问作者theYnot
相关产品推荐
相关产品推荐

