2017-03-22 220 views
1

剛剛熟悉熊貓,我遇到了groupby問題。在熊貓中添加多列

我有,我已經被改寫的成以下格式一些CSV數據:

Time, AAA, BBB, AAA, BBB 20161201 9:00:00, 10, 20, 11, 21 20161201 9:00:01, 10, 20, 11, 21 20161201 9:00:02, 10, 20, 11, 21

我想將它轉化爲以下幾點:

Time, AAA, BBB 20161201 9:00:00, 21, 41 20161201 9:00:01, 21, 41 20161201 9:00:02, 21, 41

我使用如下:

df.groupby(df.columns, axis=1).sum()

我得到的卻是:

AAA, BBB, Time 21, 41, 0.0 21, 41, 0.0 21, 41, 0.0

  1. 如何防止大熊貓從總結的時間列?我試過如下:

    df.groupby([c for c in df.columns if c != "Time"], axis=1).sum()

    但提供了錯誤:

    Grouper for 'AAA' not 1-dimensional

  2. 我怎樣才能避免熊貓移動的時間列?

如果它的事項,我結合兩隻大熊貓DataFrames一起使用,以獲得上述數據:

df = pd.merge(df1, df2, how="outer") 

然後改名一些列縮短名字,這樣我可以將它們分組。

回答

3
df.set_index('Time').groupby(axis=1, level=0).sum().reset_index() 

       Time AAA BBB 
0 20161201 9:00:00 21 41 
1 20161201 9:00:01 21 41 
2 20161201 9:00:02 21 41 
+0

謝謝。沒有lambda,這是更清潔的。 – MindJuice

+0

@MindJuice很高興我們可以幫忙! – piRSquared

2

您可以設置Time爲指數:

df.set_index("Time").pipe(lambda x: x.groupby(x.columns, axis=1).sum()) 

enter image description here

呼叫reset_index後,如果您希望它是在結果列。

+0

謝謝,這有助於給我正確的列,但生成CSV只給了我一行文本:'時間'沒有任何數據。我正在使用'csv_out = StringIO()df.to_csv(csv_out)' – MindJuice

+0

您是如何生成csv的? 'df.set_index(「Time」)。pipe(lambda x:x.groupby(x.columns,axis = 1).sum())。reset_index()。to_csv(「somefile」)'?注意,當你運行上面的行時,'df'沒有被修改,你需要在這行之後的新數據框上調用'to_csv'。 – Psidom

+0

'reset_index()'是缺失的位。它正在按照我的要求工作!謝謝! – MindJuice