Pandas如何将type列按取值拆分,按日期计算各类型平均重量生成新列
Pandas 按类别列拆分并计算分组均值实现方法
你要实现的是典型的长表转宽表+分组聚合需求,不需要手动拆分DataFrame再合并,有两种简便实现方式:
方法1:用pivot_table(最直观)
pivot_table本身就支持按指定维度分组、聚合计算,一行代码即可完成:
import pandas as pd # 原始数据构造 d = {'date' : ['2020-02-01', '2020-02-01', '2020-02-01', '2020-02-01', '2020-02-02', '2020-02-02', '2020-02-02'], 'type' : ['Bird', 'Dog', 'Cat', 'Bird', 'Dog', 'Cat', 'Bird'], 'weight' : [1, 2, 3, 4, 5, 6, 7]} df = pd.DataFrame(d) # 核心逻辑:以date为行索引,type的取值为列名,对weight求均值 result = df.pivot_table( index='date', columns='type', values='weight', aggfunc='mean' ).reset_index() # 可选:修改列名为小写格式匹配你的需求 result.columns = ['date', 'bird', 'cat', 'dog']
运行后输出结果:
date bird cat dog 0 2020-02-01 2.5 3.0 2.0 1 2020-02-02 7.0 6.0 5.0
方法2:用groupby + unstack(符合分组逻辑习惯)
如果你更熟悉groupby语法,可以先按date和type分组计算均值,再把type维度展开为列:
result = df.groupby(['date', 'type'])['weight'].mean().unstack().reset_index() # 同样可自定义列名 result.columns = ['date', 'bird', 'cat', 'dog']
两种方法最终输出结果完全一致。
内容的提问来源于stack exchange,提问作者Anton Troitsky
相关产品推荐
相关产品推荐

