簡體   English   中英

熊貓:在分組之前先排序

[英]Pandas: Sort before aggregate within a group

我有以下熊貓數據框:

A        B         C
A        A         Test1
A        A         Test2
A        A         XYZ
A        B         BA
A        B         AB
B        A         AA

我想對該數據集進行兩次分組:首先通過A和B將組連接到C中,然后僅在A上獲得僅由A列定義的組。結果如下所示:

A        A        Test1,Test2,XYZ
A        B        AB, BA
B        A        AA

最終結果應該是:

A        A,A:(Test1,Test2,XYZ), A,B:(AB, BA)
B        B,A:(AA)

串聯本身可以工作,但是排序似乎不起作用。

誰能幫助我解決這個問題?

親切的問候。

使用groupby + join

s1=df.groupby(['A','B']).C.apply(','.join)

s1
Out[421]: 
A  B
A  A    Test1,Test2,XYZ
   B              BA,AB
B  A                 AA
Name: C, dtype: object

s1.reset_index().groupby('A').apply(lambda x : x.set_index(['A','B'])['C'].to_dict())
Out[420]: 
A
A    {('A', 'A'): 'Test1,Test2,XYZ', ('A', 'B'): 'B...
B                                   {('B', 'A'): 'AA'}
dtype: object

第一sort_values由3列,然后groupbyjoin第一,然后再加入AB列和最后groupby對於dictionary每基團:

df1 = df.sort_values(['A','B','C']).groupby(['A','B'])['C'].apply(','.join).reset_index()
#if only 3 columns DataFrame
#df1 = df.sort_values().groupby(['A','B'])['C'].apply(','.join).reset_index()
df1['D'] = df1['A'] + ',' + df1['B']
print (df1)
   A  B                C    D
0  A  A  Test1,Test2,XYZ  A,A
1  A  B            AB,BA  A,B
2  B  A               AA  B,A

s = df1.groupby('A').apply(lambda x: dict(zip(x['D'], x['C']))).reset_index(name='val')
print (s)
   A                                         val
0  A  {'A,A': 'Test1,Test2,XYZ', 'A,B': 'AB,BA'}
1  B                               {'B,A': 'AA'}

如果需要元組,只需更改代碼的第一部分:

df1 = df.sort_values(['A','B','C']).groupby(['A','B'])['C'].apply(tuple).reset_index()
df1['D'] = df1['A'] + ',' + df1['B']
print (df1)
   A  B                    C    D
0  A  A  (Test1, Test2, XYZ)  A,A
1  A  B             (AB, BA)  A,B
2  B  A                (AA,)  B,A

s = df1.groupby('A').apply(lambda x: dict(zip(x['D'], x['C']))).reset_index(name='val')
print (s)
   A                                                val
0  A  {'A,A': ('Test1', 'Test2', 'XYZ'), 'A,B': ('AB...
1  B                                   {'B,A': ('AA',)}

暫無
暫無

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

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