使用 Pandas 将 groupby 聚合应用于原始数据框

Dav*_*ear 2 python group-by pandas

我想做一些在电子表格中看起来很简单的事情,但我无法理解 pandas 中的语法。我有一个可以分组的数据集。我想确定每个组的聚合统计数据,然后使用聚合在原始数据框中创建一个新列。

例如,如果我的数据框如下所示:

d = pandas.dataframe({'class', : ['f1', 'f2', 'f3', 'f1'], 
'user': ['jack', 'jen', 'joe', 'jan'], 
'screen': [12, 23, 13, 15] })
Run Code Online (Sandbox Code Playgroud)

是的,它比我的数据集小得多

我想做类似的事情

d['gp'] = d['screen'].apply(d.groupby('class').stdev())
Run Code Online (Sandbox Code Playgroud)

并确保 d.groupby().stdev() 实际上是该行的该类的 stdev。换句话说,我不希望在计算 f2 类的 gp 等时使用 f1 类的 stdev。

我的大脑正在以电子表格模式或 Python for 循环进行思考。我知道必须有一个简单的 pandas 语法来执行此操作 - 但到目前为止,我还没有在搜索中找到任何似乎适合我的用例的内容。

jez*_*ael 5

看来您需要transform返回Series与原始长度相同的长度Dataframe

d['gp'] = d.groupby('class')['screen'].transform('std')
print (d)
  class  screen  user       gp
0    f1      12  jack  2.12132
1    f2      23   jen      NaN
2    f3      13   joe      NaN
3    f1      15   jan  2.12132
Run Code Online (Sandbox Code Playgroud)

你得到NaNs,因为某些组 ( f2, f3) 的长度等于 1。