在sql中,查询看起来像是按ID从表组中选择id,avg(x),avg(y),max(x),max(y)
是否可以将其转换为对熊猫数据帧的单个操作?
我可以得到每个函数的结果
mydf['center_x'] = mydf.groupby('id')['x'].mean()
mydf['center_y'] = mydf.groupby('id')['y'].mean()
等等
但这是对同一操作的过多调用,再加上过多的存储需求(mydf很大).此外,在最后获得唯一的设置有点麻烦.
有任何想法吗?
解决方法:
从那里引用:
In [56]: grouped = df.groupby('A')
In [57]: grouped['C'].agg([np.sum, np.mean, np.std])
Out[57]:
sum mean std
A
bar 0.443469 0.147823 0.301765
foo 2.529056 0.505811 0.966450
也许与您的问题更相关,您还可以为不同的列执行不同的功能,如下所示:
In [60]: grouped.agg({'C' : np.sum,
....: 'D' : lambda x: np.std(x, ddof=1)})
....:
Out[60]:
C D
A
bar 0.443469 1.490982
foo 2.529056 0.645875
或者,是一个更接近您原始问题的实际示例:
df = pd.DataFrame({"group":list("aaaaabbbbb"), "A":np.random.rand(10), "B":np.random.rand(10)})
df.groupby("group").agg({"A":[np.sum, np.mean], "B":[np.sum, np.mean]})
A B
sum mean sum mean
group
a 1.450488 0.290098 3.526962 0.705392
b 1.570386 0.314077 2.734465 0.546893
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。