Python 按分组合并列中所有行的文本
我有一个如下所示的数据帧: 当使用列“class”和“subject”进行分组时,我想创建新的列“merge”来浓缩列“note”中的不同文本: 我是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
谢谢。例如,如果您从以下内容开始:
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))))