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 语法来执行此操作 - 但到目前为止,我还没有在搜索中找到任何似乎适合我的用例的内容。
看来您需要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。