1
Pandas中的一個人如何在同一數據集上進行多步/順序聚合?就好像每一步都是下一個的「子查詢」一樣。熊貓數據框中的多步聚合
我可以在SQL認爲它是這樣的:
SELECT x.A, COUNT(x.B) as B_COUNT, SUM(x.C_SUM) as C_SUM
FROM (
SELECT df.A, df.B, SUM(df.C) as C_SUM
FROM df
GROUP BY df.A, df.B
) x
GROUP BY x.A
在Python3.4和Pandas0.19.2工作,我有這樣一個數據幀:
import pandas
import numpy
numpy.random.seed(1)
df = pandas.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : numpy.random.randn(8),
'D' : numpy.random.randn(8)})
我試過彙總到A,B級,然後在那個數據幀上工作(也就是說,它的索引是'C',而列'A'由於它不在鍵列表中而引發KeyError
A_B_AGG = df.groupby(['A','B']).C.sum().to_frame()
A_B_AGG.keys()
#Index(['C'], dtype='object')
#Would like to do this, but throws KeyError
end_result = A_B_AGG.groupby('A').B.size()
最終,我應該得到的東西,看起來像...
A B_COUNT C_SUM
bar 3 -3.986264
foo 3 2.945186
感謝您對這樣做的正確,熊貓方式的任何指導!
當你'C.sum()'會發生什麼其他列? 'D'列會發生什麼?當你做羣組時,你可以聚合少數列並留下其他人嗎? – MYGz
@MYGz他們被忽略。當你做'groupby(...)。C'意味着你選擇了「C」列和組變量。 – Psidom
謝謝!所以如果我們想在不同的列上進行不同類型的聚合,我們必須使用'.agg()'。 – MYGz