计算pandas数据帧中行子集的平均值和最大值

时间:2015-10-23 16:45:00

标签: python pandas statistics dataframe

我的数据框看起来像:

 date       session     time         x1          x2     x3    x4      x5     x6   
 2015-05-22      1     morning       Tom         129     1     129    45     67
 2015-05-22      1     morning       Kate         0      1     670    89     34   
 2015-05-22      1     noon          GroupeId     0      1     45     56    13
 2015-05-26      2     noon          Hence        129    1     167    7     13
 2015-05-26      2     evening       Kate         0            987    876    478
 2015-05-26      3     night         Julie        0      1     567            8

所以我需要为每个会话计算每列的平均值和最大值,即每个会话的平均值X2(例如,第一个,第二个或第三个,但在实际数据帧中我有更多的行和会话),X4的值x4的最大值,每个会话的值x3的总和。我找到了很多关于几列平均值的例子,但正如你所看到的,它并不完全是我所寻找的。我尝试了一些方法,例如:multi_df.groupby(level=1).sum().to_csv('output.csv', sep='\t'),我尝试使用multi_df=df.set_index(['session','index'], inplace=False)创建的多级数据框,但它并没有给我带来感觉的结果

所以任何有关我正在寻找的转型的建议或例子都值得赞赏

1 个答案:

答案 0 :(得分:5)

你正在寻找这样的东西吗? (即每列聚合特定功能的方法?)。

import pandas as pd
import numpy as np

df = pd.io.parsers.read_csv('temp.txt', sep = '\t')

df_agg = df.groupby('session').agg({
    'x2' : np.mean,
    'x3' : np.sum,
    'x4' : np.min,
    })

# you can apply more than one function to a column like so:

df_agg_multifunc = df.groupby('session').agg({
    'x2' : [np.mean, np.std],
    'x3' : [np.sum, np.std],
    'x4' : [np.min, np.std],
    })