Pandas:当列值相同时合并行(整数按文本拼接)
解决方案
直接用pandas的groupby+agg组合就能实现你的需求,替换代码里的XX和XY部分,具体实现如下:
import pandas as pd # 假设你的DataFrame变量名为df df_merged = df.groupby('Zeitsumme').agg( V_MV=('V/MV', lambda x: ' & '.join(x.astype(str))), t_s=('t/s', lambda x: ' & '.join(x.astype(str))), Wert=('Wert', 'sum'), Zeitsumme=('Zeitsumme', 'first') # 保留原相同值,取组内第一个即可 ).rename(columns={'V_MV': 'V/MV', 't_s': 't/s'}).reset_index(drop=True)
代码说明
groupby('Zeitsumme'): 按'Zeitsumme'列的相同值分组,把需要合并的行归为一组agg()里的参数定义了每列的处理规则:- 'V/MV'和't/s'列:用
lambda函数把列内元素转成字符串后,用" & "拼接 - 'Wert'列:直接用
sum聚合函数计算数值总和 - 'Zeitsumme'列:取组内第一个值(因为分组后该列值都相同,取任意一个都可以)
- 'V/MV'和't/s'列:用
rename(columns=...): 修正聚合时自动生成的列名,还原成原列名reset_index(drop=True): 重置索引,让结果的索引从0开始连续排列
补充提示
如果原数据中'V/MV'或't/s'列本身就是字符串类型,可以去掉astype(str),直接用' & '.join(x)即可;如果列中有缺失值,建议先通过df['V/MV'] = df['V/MV'].fillna('')处理,避免拼接出无效内容。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

