繁体   English   中英

pandas:计算列唯一值的平均时间和标准差

[英]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 解决方案吗?

谢谢

您正在查找每个组的统计数据。 这可以通过groupbyagg来完成:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM