繁体   English   中英

基于另一列中的相同值组合 pandas dataframe 列中的文本值

[英]Combining text values in a pandas dataframe column based on same value in another column

我有数据,其中可能有不同的人与同一个条目相关联。

我需要将这两个条目组合在一起,并注意有两个人在上面。

例如,数据可能如下所示:

Name Share_ID value1 value2 value3 etc.
Joe  0001     1      2      4
Ann  0002     2      5      2
Mel  0001     1      2      4

output 需要:

Name      Share_ID value1 value2 value3 etc.
Joe, Mel  0001     1      2      4
Ann       0002     2      5      2

我尝试使用 groupby

df1.groupby(['Share_ID'])['Name'].apply(', '.join).reset_index()

但我的结果只是:

Share_ID Name
0001     Joe, Mel
0002     Ann

Name 列正确组合,但我丢失了其他列。 请注意,我不希望对其他列应用任何内容——Joe 和 Ann 的记录是相同的。

我认为我的方法已经关闭,但我不确定要使用什么 function。

从您离开的地方开始,您可以将生成的数据集加入到初始 DataFrame:

# Find the merged name data set and rename the 'Name' column
names = df1.groupby(['Share_ID'])['Name'].apply(', '.join).reset_index().rename(columns={'Name':'Merged Name'})
# Join it to the original dataset
df1 = df1.merge(names, on='Share_ID')
# Drop the 'Name' column then drop duplicates.
df1 = df1.drop(columns=['Name']).drop_duplicates()

您可以将得到的结果与原始 dataframe 合并,然后删除重复项:

pd.merge(df1.groupby(['Share_ID'])['Name'].apply(', '.join).reset_index(), df1, on='Share_ID').drop_duplicates(subset='Share_ID')

在分组依据中不使用values字段的任何特殊原因?

df1.groupby(['Share_ID','value1', 'value2', 'value3'])['Name'].apply(', '.join).reset_index()

这将给出所需的 output。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM