簡體   English   中英

Pandas創建多個聚合

[英]Pandas create multiple aggregations

試着看看這與熊貓有多么難或多么容易。

假設有一列有兩列數據,例如:

Cat1  Cat2
A        1
A        2
A        3
B        1
B        2
C        1
C        2
C        3
D        4

如你所見, AC有三個共同的元素1, 2, 3 B然而僅具有兩個元件1和2, D只有一個元素:4。

如何以編程方式獲得相同的結果。 這個想法是讓每個小組以某種方式返回。 因此, [A, C][1, 2, 3] ,然后[B][1, 2][D][4]

我知道可以編寫一個程序來做這個,所以我想弄清楚Pandas上是否有東西要做,而不必從頭開始構建東西。

謝謝!

您可以使用groupby兩次來實現此目的。

df = df.groupby('Cat1')['Cat2'].apply(lambda x: tuple(set(x))).reset_index()
df = df.groupby('Cat2')['Cat1'].apply(lambda x: tuple(set(x))).reset_index()

我正在使用tuple因為pandas需要元素才能進行分組才能進行groupby 上面的代碼不區分(1, 2, 3)(1, 1, 2, 3) 如果你想進行這種區分,頂替setsorted

結果輸出:

        Cat2    Cat1
0     (1, 2)    (B,)
1  (1, 2, 3)  (A, C)
2       (4,)    (D,)

你也可以:

df = df.set_index('Cat1', append=True).unstack().loc[:, 'Cat2']
df = pd.Series({col: tuple(values.dropna()) for col, values in df.items()})
df = df.groupby(df.values).apply(lambda x: list(x.index))

要得到

                   Cat1
(1.0, 2.0)          [B]
(1.0, 2.0, 3.0)  [A, C]
(4.0,)              [D]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM