![](/img/trans.png)
[英]Binning Pandas column values by standard deviation centered on average?
[英]pandas: calculate the average time and standard deviation of unique values of column
假设我有一个进程列表 A,B,C,D.... 有时间
Process time
A 3
A 4
B 5
C 6
B 7
A 4
A 5
B 2
C 3
import pandas as pd
mydf = pd.DataFrame(columns=['process','time'],
data={'process':list('ABCABCABCDAABB'),'time':[2,3,4,5,6,4,5,6,4,5,6,2,3,4]})
我想要提取的是一个 Dataframe,每行和两列每个进程只有一个条目,平均时间和标准偏差。
我按如下方式解决了问题
processes=mydf.process.unique()
dfstats = pd.DataFrame(columns=['P','average','std'])
for process in processes:
mask = mydf.process == process
average,std = mydf.loc[mask,['time']]['time'].mean(),mydf.loc[mask,['time']]['time'].std()
dfstats.loc[len(dfstats)] =[process,average,std]
我觉得应该有一个直接的方法来做到这一点。 我的解决方案太冗长、太长,而且可能太慢(我正在处理几百万行)
还有其他更多 pythonic-pandonic 解决方案吗?
谢谢
您正在查找每个组的统计数据。 这可以通过groupby
和agg
来完成:
df.groupby("process").agg(["mean", "std"])
output:
mean std
process
A 4.0 1.870829
B 4.4 1.516575
C 4.0 0.000000
D 5.0 NaN
在Series.Groupby
上尝试NamedAgg
mydf.groupby('process')['time'].agg(average='mean', std='std').reset_index()
Out[148]:
process average std
0 A 4.0 1.870829
1 B 4.4 1.516575
2 C 4.0 0.000000
3 D 5.0 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.