gpt4 book ai didi

python - 按年份和 Pandas 中的 id 求和

转载 作者:行者123 更新时间:2023-11-28 20:40:42 25 4
gpt4 key购买 nike

我想了解使用 pandas 在 Python 2.7 中复制以下 Stata 命令的最紧凑方法:egen yr_id_sum = total(var_to_sum),缺失(id year)

我想在此表中生成 yr_id_sum 列:

id    year    value  yr_id_sum
1 2010 1 3
1 2010 2 3
1 2011 3 7
1 2011 4 7
2 2010 11 23
2 2010 12 23
2 2011 13 27
2 2011 14 27

我可以按如下方式为一个分组变量执行此操作(这可能有助于阐明我正在尝试执行的操作):

def add_mean(grp):
grp['ann_sum'] = grp['var_to_sum'].sum()
return grp

df=df.groupby('year').apply(add_sum)

这等同于 egen year_sum = total(var_to_sum), missing by(year)

我很难扩展像 this 这样的答案关于在我的案例中使用带有多索引的总和。

df.set_index(['year', 'id'], inplace=True)
df=df.groupby(['year', 'id').apply(add_sum)

似乎它应该做我想做的事...但我得到了 Exception: cannot handle a non-unique multi-index!

以下是我已经看过的一些答案:

最佳答案

要重现您想要的输出,您可以使用 transform:它获取 groupby 操作的结果并将其广播回原始索引。例如:

>>> df["yr_id_sum"] = df.groupby(["id", "year"])["value"].transform(sum)
>>> df
id year value yr_id_sum
0 1 2010 1 3
1 1 2010 2 3
2 1 2011 3 7
3 1 2011 4 7
4 2 2010 11 23
5 2 2010 12 23
6 2 2011 13 27
7 2 2011 14 27

基本上是

>>> df.groupby(["id", "year"])["value"].sum()
id year
1 2010 3
2011 7
2 2010 23
2011 27
Name: value, dtype: int64

但重复以匹配用作索引的原始列。

关于python - 按年份和 Pandas 中的 id 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35328979/

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