Python 按分组合并列中所有行的文本

Python 按分组合并列中所有行的文本,python,pandas,group-by,Python,Pandas,Group By,我有一个如下所示的数据帧: 当使用列“class”和“subject”进行分组时,我想创建新的列“merge”来浓缩列“note”中的不同文本: 我是Python新手,有人能帮我找到一个干净的方法来实现这一点吗 谢谢。例如,如果您从以下内容开始: 0_x 0_y A a 3.0 2.0 b 2.0 0.0 c 0.0 2.0 合并字符串很容易 从 df['merged']=df['0_x'].astype(str)+'|'+df['0_y'].astype

我有一个如下所示的数据帧:

当使用列“class”和“subject”进行分组时,我想创建新的列“merge”来浓缩列“note”中的不同文本:

我是Python新手,有人能帮我找到一个干净的方法来实现这一点吗


谢谢。

例如,如果您从以下内容开始:

    0_x 0_y
A       
a   3.0 2.0
b   2.0 0.0
c   0.0 2.0
合并字符串很容易

df['merged']=df['0_x'].astype(str)+'|'+df['0_y'].astype(str)
导致

    0_x 0_y merged
A           
a   3.0 2.0 3.0|2.0
b   2.0 0.0 2.0|0.0
c   0.0 2.0 0.0|2.0

    0_x 0_y merged  special_merge
A               
a   3.0 2.0 3.0|2.0 3.0|2.0
b   2.0 0.0 2.0|0.0 2.0|0.0
c   0.0 2.0 0.0|2.0 0.0
如果您想要更复杂的内容,那么使用
.apply
方法跨两列执行函数效果很好

def联合收割机(x):
如果x['0_x']==0:
返回str(x['0\u x'])
其他:
返回str(x['0_x'])+'|'+str(x['0_y']))
df['special_merge']=df.apply(合并列,轴=1)
导致

    0_x 0_y merged
A           
a   3.0 2.0 3.0|2.0
b   2.0 0.0 2.0|0.0
c   0.0 2.0 0.0|2.0

    0_x 0_y merged  special_merge
A               
a   3.0 2.0 3.0|2.0 3.0|2.0
b   2.0 0.0 2.0|0.0 2.0|0.0
c   0.0 2.0 0.0|2.0 0.0

例如,如果从以下内容开始:

    0_x 0_y
A       
a   3.0 2.0
b   2.0 0.0
c   0.0 2.0
合并字符串很容易

df['merged']=df['0_x'].astype(str)+'|'+df['0_y'].astype(str)
导致

    0_x 0_y merged
A           
a   3.0 2.0 3.0|2.0
b   2.0 0.0 2.0|0.0
c   0.0 2.0 0.0|2.0

    0_x 0_y merged  special_merge
A               
a   3.0 2.0 3.0|2.0 3.0|2.0
b   2.0 0.0 2.0|0.0 2.0|0.0
c   0.0 2.0 0.0|2.0 0.0
如果您想要更复杂的内容,那么使用
.apply
方法跨两列执行函数效果很好

def联合收割机(x):
如果x['0_x']==0:
返回str(x['0\u x'])
其他:
返回str(x['0_x'])+'|'+str(x['0_y']))
df['special_merge']=df.apply(合并列,轴=1)
导致

    0_x 0_y merged
A           
a   3.0 2.0 3.0|2.0
b   2.0 0.0 2.0|0.0
c   0.0 2.0 0.0|2.0

    0_x 0_y merged  special_merge
A               
a   3.0 2.0 3.0|2.0 3.0|2.0
b   2.0 0.0 2.0|0.0 2.0|0.0
c   0.0 2.0 0.0|2.0 0.0
您可以尝试在groupby之后的note列的唯一值集上使用join()

df['merged'] = df.groupby(['class', 'subject']).note.transform(lambda x : "|".join(list(set(x))))
您可以尝试在groupby之后的note列的唯一值集上使用join()

df['merged'] = df.groupby(['class', 'subject']).note.transform(lambda x : "|".join(list(set(x))))