[英]Grouping and concatening values in Pandas dataframes
我在本網站的另一個請求中找到了我的問題的答案,但是提供的答案對我不起作用,所以我在另一個請求中詢問。 我將使用相同的數據並顯示我得到的結果。
所以基本上,我有一個 dataframe ,其中一列有重復的值,我想將它們組合在一行中,並且我想將另一列的值連接為組合行的值。
這是示例:
data = np.array([['John', 'Smith', 1], ['John', 'Smith', 7], ['Eric', 'Adams', 9], ['Jane', 'Doe', 14], ['Jane', 'Doe', 16], ['John', 'Smith', 19]])
df = pd.DataFrame(data, columns=['FIRST_NM', 'LAST_NM', 'PAGE_NUM'])
output 符合預期:
FIRST_NM LAST_NM PAGE_NUM
0 John Smith 1
1 John Smith 7
2 Eric Adams 9
3 Jane Doe 14
4 Jane Doe 16
5 John Smith 19
一旦我對FIRST_NM
和LAST_NM
的值進行分組並連接PAGE_NUM
的值,這就是我想要得到的:
FIRST_NM LAST_NM PAGE_NUM
0 John Smith 1,7,19
1 Eric Adams 9
2 Jane Doe 14,16
建議的解決方案,對我來說很有意義,是使用這個:
df.groupby(['FIRST_NM', 'LAST_NM']).apply(lambda group: ','.join(group['PAGE_NUM']))
然而不幸的是,這似乎根本沒有效果,我得到了完全相同的結果:
FIRST_NM LAST_NM PAGE_NUM
0 John Smith 1
1 John Smith 7
2 Eric Adams 9
3 Jane Doe 14
4 Jane Doe 16
5 John Smith 19
任何人都可以幫助指出我做錯了什么?
提前謝謝了!
傑夫
通過groupby()
和agg()
嘗試:
out=df.groupby(['FIRST_NM','LAST_NM'],sort=False,as_index=False).agg({'PAGE_NUM':','.join})
如果需要唯一值,則使用:
out=df.groupby(['FIRST_NM','LAST_NM'],sort=False,as_index=False).agg({'PAGE_NUM':set})
out['PAGE_NUM']=out['PAGE_NUM'].astype(str).str[1:-1].str.replace("'",'')
Output out
:
FIRST_NM LAST_NM PAGE_NUM
0 John Smith 1,7,19
1 Eric Adams 9
2 Jane Doe 14,16
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.