熊猫:计算色谱柱唯一值的平均时间和标准偏差

时间:2020-08-29 18:28:17

标签: python pandas statistics

假设我有一个带有时间的进程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]})

我要提取的是一个数据框,每个进程每行只有一个条目,每列只有两列,平均时间和标准差。

我解决了以下问题

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

谢谢

2 个答案:

答案 0 :(得分:1)

您正在找到每个组的统计信息。可以通过groupbyagg完成:

df.groupby("process").agg(["mean", "std"])

输出:

        mean       std
process
A        4.0  1.870829
B        4.4  1.516575
C        4.0  0.000000
D        5.0       NaN

答案 1 :(得分:1)

NamedAgg上尝试Series.Groupby

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
相关问题