如何拆分DataFrame并将处理后的内容重新合并
问题
我有一个如下所示的DataFrame,其中单元格内容以斜杠分隔。我希望拆分这些单元格以分配其他信息,拆分时需保持原行的关联关系,示例如下:
# 当前DataFrame newcolumn code name place NA/NA 121/102 John/James GBR/GBR NA/NA 100/103 Harry/Peter GBR/GBR NA/NA 113/111 Will/Jamie GBR/GBR NA/NA 109/112 Brian/Steve GBR/GBR
期望拆分后的DataFrame为:
newcolumn code name place NA 121 John GBR NA 102 James GBR NA 100 Harry GBR NA 103 Peter GBR NA 113 Will GBR NA 111 Jamie GBR NA 109 Brian GBR NA 112 Steve GBR
填充newcolumn列后,我需要将相邻两行(第1与2行、第3与4行等)重新合并(或许可以用循环实现)。
解决方案
步骤1:拆分单元格并展开行
用Pandas的str.split配合explode就能快速完成拆分,同时保留原行的关联关系:
import pandas as pd # 构造原始数据 data = { 'newcolumn': ['NA/NA', 'NA/NA', 'NA/NA', 'NA/NA'], 'code': ['121/102', '100/103', '113/111', '109/112'], 'name': ['John/James', 'Harry/Peter', 'Will/Jamie', 'Brian/Steve'], 'place': ['GBR/GBR', 'GBR/GBR', 'GBR/GBR', 'GBR/GBR'] } df = pd.DataFrame(data) # 对所有列按斜杠拆分,转成列表后展开 for col in df.columns: df[col] = df[col].str.split('/') df = df.explode(df.columns.tolist()).reset_index(drop=True) # 可选:将code列转为整数类型 df['code'] = df['code'].astype(int)
执行后就能得到你期望的拆分结果。
步骤2:合并相邻两行
可以通过分组的方式实现每两行合并,这里提供两种常见的合并逻辑:
逻辑1:将两行信息拆分到不同列
# 每两行分为一组 df['group'] = df.index // 2 # 合并组内两行,用后缀区分原行与相邻行的字段 merged_df = df.groupby('group').agg( newcolumn_1=('newcolumn', lambda x: x.iloc[0]), code_1=('code', lambda x: x.iloc[0]), name_1=('name', lambda x: x.iloc[0]), place_1=('place', lambda x: x.iloc[0]), newcolumn_2=('newcolumn', lambda x: x.iloc[1]), code_2=('code', lambda x: x.iloc[1]), name_2=('name', lambda x: x.iloc[1]), place_2=('place', lambda x: x.iloc[1]) ).reset_index(drop=True)
逻辑2:将两行同名字段拼接
# 每两行分为一组 df['group'] = df.index // 2 # 将同名字段按指定格式拼接 merged_df = df.groupby('group').agg( code=('code', '/'.join), name=('name', ' & '.join), place=('place', lambda x: x.iloc[0]), newcolumn=('newcolumn', lambda x: x.iloc[0]) ).reset_index(drop=True)
你可以根据实际需求调整agg里的函数逻辑。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

