如何在Pandas中将同一编号对应的两行数据合并为一行?
解决DataFrame按分组合并指定行的问题
没问题,我来帮你搞定这个DataFrame的合并需求!根据你的数据结构,我们可以用Pandas的pivot或者groupby方法轻松实现目标格式,下面是具体的步骤和代码:
步骤1:构造示例DataFrame
首先我们先还原你的原始数据:
import pandas as pd df = pd.DataFrame({ 'no': [1121, 1121, 3612, 3612], 'frc': [1, 0, 1, 0], 'val': ["John", 236, "Mary", 545] })
方法1:使用pivot快速重塑数据
这个方法最简洁,适合这种明确的"分组-对应列"场景:
# 按no分组,将frc的1和0转为列,对应val的值 pivoted_df = df.pivot(index='no', columns='frc', values='val').reset_index(drop=True) # 格式化为你需要的字符串输出 output = pivoted_df.apply(lambda row: f'"{row[1]}",{row[0]}', axis=1) # 打印结果(去掉索引) print(output.to_string(index=False))
运行后会输出:
"John",236 "Mary",545
方法2:使用groupby自定义聚合
如果你的数据有更复杂的逻辑,用groupby自定义聚合函数会更灵活:
def combine_rows(group): # 提取分组内frc=1的val(姓名) name = group[group['frc'] == 1]['val'].iloc[0] # 提取分组内frc=0的val(数字) num = group[group['frc'] == 0]['val'].iloc[0] # 返回指定格式的字符串 return f'"{name}",{num}' # 按no分组并应用自定义函数 result = df.groupby('no').apply(combine_rows).reset_index(drop=True) # 打印结果 print(result.to_string(index=False))
这个方法和上面的输出结果完全一致,适合需要额外处理逻辑的场景。
内容的提问来源于stack exchange,提问作者Divyansh Singh
相关产品推荐
相关产品推荐

