Python 基于另一列中的相同值组合dataframe列中的文本值
我有数据,可能有不同的人与同一条目关联 我需要将这两个条目合并在一起,注意上面有两个人 例如,数据可能看起来像:Python 基于另一列中的相同值组合dataframe列中的文本值,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有数据,可能有不同的人与同一条目关联 我需要将这两个条目合并在一起,注意上面有两个人 例如,数据可能看起来像: Name Share_ID value1 value2 value3 etc. Joe 0001 1 2 4 Ann 0002 2 5 2 Mel 0001 1 2 4 输出需要是: Name Share_ID value1 value2 value3 etc. Joe, Mel
Name Share_ID value1 value2 value3 etc.
Joe 0001 1 2 4
Ann 0002 2 5 2
Mel 0001 1 2 4
输出需要是:
Name Share_ID value1 value2 value3 etc.
Joe, Mel 0001 1 2 4
Ann 0002 2 5 2
我试着用groupby
df1.groupby(['Share\u ID'])['Name'].apply(','.join).reset\u index()
但我的结果是:
Share_ID Name
0001 Joe, Mel
0002 Ann
名称列组合正确,但我丢失了其他列。请注意,我不希望对其他列应用任何内容——Joe和Ann的记录是相同的
我认为我的方法是关闭的,但我不确定要使用什么函数。从停止的地方开始,您可以将生成的数据集连接回初始数据帧:
# 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()
您可以获取获得的结果,将其与原始数据帧合并,并删除重复项:
pd.merge(df1.groupby(['Share_ID'])['Name'].apply(', '.join).reset_index(), df1, on='Share_ID').drop_duplicates(subset='Share_ID')
不使用分组依据中的
值
字段的任何特殊原因
df1.groupby(['Share_ID','value1', 'value2', 'value3'])['Name'].apply(', '.join).reset_index()
这将提供所需的输出。您是否与groupby进行了核对?这是一个很好的解决方案;我将另一个标记为已接受,只是因为作为新用户,它对我来说更具可读性(因此,当我稍后查看我的代码时,我将更有可能记住所做的操作)。@RoccoMaxamas谢谢!精彩的。我很欣赏它被分解成多行,并且列重命名是为了防止有一堆Name_x和Name_y列。