簡體   English   中英

熊貓:將每列匯總到一個用逗號分隔的列表中,沒有重復項

[英]Pandas: Aggregate each column into a comma separated list without duplicates

問題:

我有一個很大的CSV文件,看起來像這樣:

A  B   C     D    ...
1  dog black NULL ...
1  dog white NULL ...
1  dog black NULL ...
2  cat red   NULL ...
...

現在,我想對“ A ”列進行“分組”,並將其余各列聚合到一個逗號分隔的列表中,而不重復。 解決方案應如下所示:

A  B   C             D    ...
1  dog black, white  NULL ...
2  cat red           NULL ...
...

由於CSV中的名稱和列數可能會發生變化,因此我更喜歡沒有硬編碼名稱的解決方案。

二手方法:

我用以下代碼嘗試了pandas軟件包:

import pandas as pd
data = pd.read_csv("C://input.csv", sep=';')
data = data.where((pd.notnull(data)), None)
data_group = data.groupby(['A']).agg(lambda x: set(x))
data_group.to_csv("C://result.csv", sep=';')

set運算符恰好滿足了我的要求。 但是,生成的CSV如下所示:

A  B       C                   D      ...
1  {'dog'} {'black', 'white'}  {None} ...
2  {'cat'} {'red'}             {None} ...
...

我不希望在導出中使用{}'' ,並且D列也應該為空並且不包含單詞None

題:

我是在正確的道路上,還是有一種更優雅的方法來實現自己的目標?

用逗號join集合:

df.groupby('A', as_index=False).agg(lambda x: ', '.join(set(x.dropna())))

#   A    B             C D
#0  1  dog  white, black  
#1  2  cat           red  

暫無
暫無

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

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