Pandas需求:为X列重复行生成对应Y列的CSV合并值填充至Z列
处理Pandas DataFrame重复X列对应的Y列合并需求
需求说明
给定包含X、Y、Z列的DataFrame,当X列存在重复值时,将该X对应的所有Y列值拼接为CSV格式字符串,填充到对应行的Z列;若X无重复,Z列保持为空。
输入示例
X Y Z 0 1 a NaN 1 1 b NaN 2 2 c NaN
期望输出
X Y Z 0 1 a a,b 1 1 b a,b 2 2 c NaN
解决方案
通过groupby结合transform方法即可实现,该方法能为原DataFrame每行返回对应分组的计算结果,完美匹配需求:
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({'X': [1, 1, 2], 'Y': ['a', 'b', 'c'], 'Z': [None, None, None]}) # 计算每个X对应的Y列CSV拼接字符串 y_joined = df.groupby('X')['Y'].transform(lambda x: ','.join(x)) # 仅为X重复的行填充Z列 df['Z'] = df['Z'].where(~df.duplicated('X', keep=False), y_joined) print(df)
代码解释
groupby('X')['Y']:按X列分组,提取每组的Y列数据transform(lambda x: ','.join(x)):对每个分组的Y值进行CSV格式拼接,返回与原DataFrame行数一致的结果序列df.duplicated('X', keep=False):标记所有X值重复的行(keep=False会标记所有重复行,而非仅保留第一个/最后一个)df['Z'].where(...):仅在X不重复时保留原Z值(空),否则替换为拼接后的字符串
内容的提问来源于stack exchange,提问作者Prasanth J
相关产品推荐
相关产品推荐

