我有一个用户数据库。我想把它们分成两列,分别有user1和user2。我解决这个问题的方法是把名字分成多列,然后合并成两列的用户。
我遇到的问题是一些名字很长,在分裂之后。这些名称占用了数据帧的一些位置,这使得正确合并变得更加困难。
Users |
---|
Maria Melinda Del Valle Justin Howard |
小Devin Craig Jr. Michael Carter III |
让娜·德·波尔多·阿尔哈姆迪 |
您可以使用:
def f(sr):
m = sr.isna().cumsum().loc[lambda x: x < 2]
return sr.dropna().groupby(m).apply(' '.join)
out = df.apply(f, axis=1).rename(columns=lambda x: f'User{x+1}')
输出:
>>> out
User1 User2
0 Maria Melinda Del Valle Justin Howard
1 Devin Craig Jr. Michael Carter III
2 Jeanne De Bordeaux Alhamdi
正如@Barmar所建议的,如果你知道在第一个分割中放置空白列的位置,你应该知道如何创建这两个列。