gpt4 book ai didi

python - 如何展平 Pandas DataFrameGroupBy

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:18 27 4
gpt4 key购买 nike

我有一个类型为DataFrameGroupBygrouped 对象。我想用它来聚合一些数据,如下所示:

aggregated = grouped.aggregate([np.sum, np.mean], axis=1)

这将返回一个 DataFrame,其格式为:

aggregated[:3].to_dict()
"""
{('VALUE1', 'sum'): {
('US10adam034', 'PRCP'): 701,
('US10adam036', 'PRCP'): 1015,
('US10adam036', 'SNOW'): 46},
('VALUE1', 'mean'): {
('US10adam034', 'PRCP'): 100.14285714285714,
('US10adam036', 'PRCP'): 145.0,
('US10adam036', 'SNOW'): 46.0}}
"""

打印头部会产生这样的结果:

                    VALUE1            
sum mean
ID ELEMENT
US10adam034 PRCP 701 100.142857
US10adam036 PRCP 1015 145.000000
SNOW 46 46.000000
US10adam046 PRCP 790 131.666667
US10adam051 PRCP 5 0.555556
US10adam056 PRCP 540 31.764706
SNOW 25 1.923077
SNWD 165 15.000000

效果很好。它可以轻松地为我的示例计算总和均值,其中分组索引为(ID, ELEMENT)。但是,我真的很想将它变成单行格式,其中 ID 是唯一的 并且列是 ELEMENT(总和|平均值)。我可以几乎像这样使用apply到达那里:

def getNewSeries(t):
# type(t) => Series
element = t.name[1] # t.name is a tuple ('ID', 'ELEMENT')
sum_index=f'{element}sum'
mean_index=f'{element}mean'
return pd.Series(t['VALUE1'].values, index=[sum_index, mean_index])

aggregated.apply(getNewSeries, axis=1, result_type='expand')

再次打印头部我得到:

                       PRCPmean  PRCPsum   SNOWmean  SNOWsum  SNWDmean  ...
ID ELEMENT
US10adam034 PRCP 100.142857 701.0 NaN NaN NaN
US10adam036 PRCP 145.000000 1015.0 NaN NaN NaN
SNOW NaN NaN 46.000000 46.0 NaN
US10adam046 PRCP 131.666667 790.0 NaN NaN NaN
US10adam051 PRCP 0.555556 5.0 NaN NaN NaN
US10adam056 PRCP 31.764706 540.0 NaN NaN NaN
SNOW NaN NaN 1.923077 25.0 NaN
SNWD NaN NaN NaN NaN 15.0

我希望我的最终 DataFrame 看起来像这样:

            PRCPmean    PRCPsum   SNOWmean  SNOWsum  SNWDmean  ...
ID
US10adam034 100.142857 701.0 NaN NaN NaN
US10adam036 145.000000 1015.0 46.000000 46.0 NaN
US10adam046 131.666667 790.0 NaN NaN NaN
US10adam051 0.555556 5.0 NaN NaN NaN
US10adam056 31.764706 540.0 1.923077 25.0 15.0

有没有办法使用applyaggtransform 将这些数据聚合成单行?我也尝试过在唯一 ID 上创建自己的迭代器,但速度非常慢。我喜欢使用 agg 计算总和/均值的简便性。

最佳答案

我喜欢将 f-string 与列表推导一起使用.. f-string 格式化需要 Python 3.6+。

df_out = df.unstack()['VALUE1']
df_out.columns = [f'{i}{j}' for i, j in df_out.columns]
df_out

输出:

             PRCPsum  SNOWsum    PRCPmean  SNOWmean
US10adam034 701.0 NaN 100.142857 NaN
US10adam036 1015.0 46.0 145.000000 46.0

关于python - 如何展平 Pandas DataFrameGroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com