我将合并具有特定文本结构的 Dataframe 的多行
例如,我有
df = pd.DataFrame([
(1, 'john', 'merge'),
(1, 'smith,', 'merge'),
(1, 'robert', 'merge'),
(1, 'g', 'merge'),
(1, 'owens,', 'merge'),
(2, 'sarah will', 'OK'),
(2, 'ali kherad', 'OK'),
(2, 'david', 'merge'),
(2, 'lu,', 'merge'),
], columns=['ID', 'Name', 'Merge'])
也就是
ID Name Merge
1 john merge
1 smith, merge
1 robert merge
1 g merge
1 owens, merge
2 sarah will OK
2 ali kherad OK
2 david merge
2 lu, merge
目标是创建一个数据框,将文本合并到行中,如下所示
ID Name
0 1 john smith
1 1 robert g owens
2 2 sarah will
3 2 ali kherad
4 2 david lu
我找到了一种方法来创建列'Merge'来知道我是否需要合并。
df = pd.DataFrame(df[df['Merge']=='merge'].groupby(['ID','Merge'], axis=0)['Name'].apply(' '.join))
res = df.apply(lambda x: x.str.split(',').explode()).reset_index().drop(['Merge'], axis=1)
首先,当列'Merge'等于'merge'时,我按名称分组。我知道这不是最好的方法,因为它只考虑了这个条件,但在我的 Dataframe 中,当列' Merge '等于' OK '时,我应该有其他行。然后,我按','拆分。
结果是
ID Name
0 1 john smith
1 1 robert g owens
2 1
3 2 david lu
4 2
另一个问题是,当我有超过4000行时,在我的真实示例中顺序不正确,我如何保持顺序并在必要时合并文本?
1条答案
按热度按时间ktecyv1j1#
制作石斑鱼进行分组
g
(检查反转索引)删除,以及按ID和g分组
out