2017-05-05 78 views
0

我正在嘗試對我的數據框進行聚合。問題是我需要聚集超過一百列。現在我有他們所有這樣鍵入這樣Python Pandas:在沒有明確輸入列的情況下聚合大列子集

df_grouped = df.groupby(['Column1'])['Column2','Column3','Column4','Column5'].sum() 

直到最後一列。如果必須做出改變,那麼非常煩人而且難以維護。有沒有一種方法可以在不明確輸入的情況下引用這些列?

+0

你想排除除了列1任一列? – IanS

+0

是的,數據框中有更多的列我不想分組,也不總結。 – Duudsrednaz

+0

如果您發現它們有幫助,請不要忘記接受我們的答案。 –

回答

2

如果您可以選擇具有條件的所需列,以下是一種超級簡單的方法。我偶爾使用這種方法,但不適用於> 100列,所以我不確定性能影響。

對於樣品DF:

df 
    a b c bb 
0 1 4 4 4 
1 2 5 5 5 
2 7 87 87 87 
3 5 6 6 6 

使用列表理解:

df[[i for i in df.columns if 'b' in i]] 
    b bb 
0 4 4 
1 5 5 
2 87 87 
3 6 6 

這顯然可以用你喜歡的任何條件下使用。

df_grouped = df.groupby(['Column1'][[i for i in df.columns if 'b' in i]].sum() 

使用我的超級簡單的例子,一些並排性能:

%timeit df[[i for i in df.columns if 'b' in i]] 
1000 loops, best of 3: 394 µs per loop 

%timeit df[df.columns.difference(['a','c'])] 
1000 loops, best of 3: 598 µs per loop 
5

您可以通過差限定列:

df_grouped = df.groupby(['Column1'])[ 
    df.columns.difference(columns_to_exclude + ['Column1']) 
].sum() 

注意,方法difference使用套,所以列的順序不能保證。

+0

謝謝,我沒有意識到你可以在[]括號之間使用任何函數。不幸的是,我必須儘可能多地排除我需要包含的內容,但我想我也可以在括號之間使用索引引用? – Duudsrednaz

+0

它取決於您如何定義要排除的列,但我確定該界面非常靈活(例如,請參閱其他答案)。 – IanS

相關問題