在R语言中如何基于另一列数据合并同一列的多行内容
解决DataFrame中按Location分组合并Name列并保留所有行的问题
原始数据构造
先将你提供的原始数据转换成pandas DataFrame:
import pandas as pd import numpy as np data = { 'Name': ['Mr.', 'Thomas', 'Smith', '', 'Mrs.', 'Carrie', 'Ann', 'Brown', 'Elizabeth', 'Johnson'], 'Location': ['NE', np.nan, np.nan, np.nan, 'NW', np.nan, np.nan, np.nan, 'SE', np.nan] } df = pd.DataFrame(data)
处理步骤
- 创建分组标识:以Location列的非空值为分组起点,生成分组标签并向下填充,让同一组的所有行共享同一个分组ID:
df['group_id'] = df['Location'].notna().cumsum()
- 分组合并Name列:按分组ID聚合,将每组内非空的Name值拼接成空格分隔的完整字符串:
grouped_names = df.groupby('group_id')['Name'].apply(lambda x: ' '.join([s for s in x if s.strip() != '']))
- 映射合并后的值到原表:把聚合好的完整名称映射回原DataFrame的每一行,替换原Name列内容:
df['Name'] = df['group_id'].map(grouped_names)
- 清理临时列:删除用于分组的临时辅助列:
df = df.drop('group_id', axis=1)
最终结果
运行上述代码后,得到的DataFrame与你期望的结果一致:
Name Location 0 Mr. Thomas Smith NE 1 Mr. Thomas Smith NaN 2 Mr. Thomas Smith NaN 3 Mr. Thomas Smith NaN 4 Mrs. Carrie Ann Brown NW 5 Mrs. Carrie Ann Brown NaN 6 Mrs. Carrie Ann Brown NaN 7 Mrs. Carrie Ann Brown NaN 8 Elizabeth Johnson SE 9 Elizabeth Johnson NaN
如果需要将Location列的NaN显示为空字符串,可添加以下代码:
df['Location'] = df['Location'].fillna('')
内容的提问来源于stack exchange,提问作者Ophelia Hanson
相关产品推荐
相关产品推荐

