2016-12-28 83 views
0

我有一個csv有多個列。 作爲一個例子,這裏是報頭和所述第一2行的文件的:按列分組並返回多個聚合作爲數據框

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 

我csv文件加載到一個數據幀:

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

我分組數據幀由AS柱:

byAS = df.groupby('AS') 

現在我想以創建具有使用DataFrameGroupBy對象(拜亞斯)以下列的新數據幀:

  • AS列
  • ACC列
  • 第一個值
  • U列的第一個值
  • 平均PerLotPNL列
  • 總和SumOneLotPNL列
  • 值Y列的

我該怎麼做?

+2

請說明原始文件的樣子和您想要的輸出是什麼。用平均值/總和彙總列是直截了當的,但不清楚ACC列或U列應該是什麼。 – 3novak

+0

如果問題沒有太大,請包含csv文件。這使問題更容易。 – MYGz

+0

@MYGz我添加了一部分csv文件。你瞭解數據就足夠了嗎? – anilca

回答

7

一旦您的數據框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) 
+0

我得到pandas.core.base.DataError:沒有數字類型進行聚合。 – anilca

+0

這意味着您必須對數據幀執行一些數據清理,因爲聚合函數遇到非數字數據。檢查列的dtype並在適當的地方使用[pd.to_numeric()](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_numeric.html)。 – 3novak

+0

謝謝你的回答@ 3novak – anilca