我正在嘗試對我的數據框進行聚合。問題是我需要聚集超過一百列。現在我有他們所有這樣鍵入這樣Python Pandas:在沒有明確輸入列的情況下聚合大列子集
df_grouped = df.groupby(['Column1'])['Column2','Column3','Column4','Column5'].sum()
直到最後一列。如果必須做出改變,那麼非常煩人而且難以維護。有沒有一種方法可以在不明確輸入的情況下引用這些列?
我正在嘗試對我的數據框進行聚合。問題是我需要聚集超過一百列。現在我有他們所有這樣鍵入這樣Python Pandas:在沒有明確輸入列的情況下聚合大列子集
df_grouped = df.groupby(['Column1'])['Column2','Column3','Column4','Column5'].sum()
直到最後一列。如果必須做出改變,那麼非常煩人而且難以維護。有沒有一種方法可以在不明確輸入的情況下引用這些列?
如果您可以選擇具有條件的所需列,以下是一種超級簡單的方法。我偶爾使用這種方法,但不適用於> 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
您可以通過差限定列:
df_grouped = df.groupby(['Column1'])[
df.columns.difference(columns_to_exclude + ['Column1'])
].sum()
注意,方法difference
使用套,所以列的順序不能保證。
謝謝,我沒有意識到你可以在[]括號之間使用任何函數。不幸的是,我必須儘可能多地排除我需要包含的內容,但我想我也可以在括號之間使用索引引用? – Duudsrednaz
它取決於您如何定義要排除的列,但我確定該界面非常靈活(例如,請參閱其他答案)。 – IanS
你想排除除了列1任一列? – IanS
是的,數據框中有更多的列我不想分組,也不總結。 – Duudsrednaz
如果您發現它們有幫助,請不要忘記接受我們的答案。 –