按列分组并将多个聚合作为数据框返回

时间:2016-12-28 15:12:18

标签: python pandas group-by

我有一个有多列的csv。 例如,这里是标题和文件的前两行:

Select "Equipment1" as SourceTable, Serial, Location from [Equipment1]
Union all select "Equipment2", Serial, Location from [Equipment2]
Union all select "Equipment3", Serial, Location from [Equipment3]

我将csv文件加载到数据帧:

ACC;SYM;SumRealPNL;Count;MinAVG;PerLotPNL;SumOneLotPNL;ProfitOnly;ProfitOnlyCount;ProfitOnlyMinAVG;LossOnly;LossOnlyCount;LossOnlyMinAVG;Period;-;P;Q;R;S;Total;U;AS;W;YEAH;Y
31942;EURUSD;4.593,00;17;730;336,47;5.720,00;5.720,00;17;730;0,00;0;0;4;;1;2;0;1;4;A;31942EURUSD1;12;16;18
34887;XAUUSD;16.150,00;7;276;588,43;4.119,00;4.119,00;7;276;0,00;0;0;4;;1;2;0;1;4;A;34887XAUUSD1;12;16;18

我按 AS 列对数据框进行了分组:

df = pd.read_csv('aaaa.csv', header=0, sep=';')

现在我想使用DataFrameGroupBy对象(byAS)创建一个包含以下列的新数据框:

  • AS专栏
  • ACC列的第一个值
  • U列的第一个值
  • PerLotPNL列的平均值
  • SumOneLotPNL列的总和
  • Y列的总和

我该怎么做?

1 个答案:

答案 0 :(得分:9)

在您的帖子中已经有df列上的数据框AS和分组后,您可以使用agg功能获取所需的输出。

byAS = df.groupby('AS')

result = byAS.agg({'ACC': 'first',
                   'U': 'first', 
                   'PerLotPNL': np.mean,
                   'SumOneLotPNL': np.sum,
                   'Y': np.sum}).reset_index(inplace=True)