如何用Pandas实现DataFrame同ID行的UNITS值合并到DESC列?
用Pandas实现DataFrame的DESC字段拼接处理
完全可以用Pandas实现这个需求,下面是两种可行的实现方式:
方法一:分组聚合+合并拼接
先按MY_ID分组,将每组的UNITS值拼接成空格分隔的字符串,再合并回原DataFrame,最后完成DESC字段的拼接:
import pandas as pd # 构造示例数据 data = { 'MY_ID': ['A1', 'A1', 'A1', 'A1', 'A2', 'A2', 'A2', 'A2'], 'UNITS': [10, 15, 0, 45, 20, 22, 28, 30], 'DESC': ['DESCRIPTION'] * 8 } df = pd.DataFrame(data) # 分组聚合:将每个MY_ID对应的UNITS转为空格分隔的字符串 units_agg = df.groupby('MY_ID')['UNITS'].apply(lambda x: ' '.join(map(str, x))).reset_index(name='UNITS_STR') # 合并并拼接DESC字段 df = df.merge(units_agg, on='MY_ID') df['DESC'] = df['DESC'] + ' ' + df['UNITS_STR'] df = df.drop('UNITS_STR', axis=1) print(df)
方法二:使用transform简化操作
利用transform方法可以直接将分组聚合的结果广播到原DataFrame的每一行,无需额外合并步骤,代码更简洁高效:
import pandas as pd # 构造示例数据 data = { 'MY_ID': ['A1', 'A1', 'A1', 'A1', 'A2', 'A2', 'A2', 'A2'], 'UNITS': [10, 15, 0, 45, 20, 22, 28, 30], 'DESC': ['DESCRIPTION'] * 8 } df = pd.DataFrame(data) # 直接生成拼接后的DESC字段 df['DESC'] = df['DESC'] + ' ' + df.groupby('MY_ID')['UNITS'].transform(lambda x: ' '.join(map(str, x))) print(df)
两种方法执行后都会得到你期望的输出:
MY_ID UNITS DESC 0 A1 10 DESCRIPTION 10 15 0 45 1 A1 15 DESCRIPTION 10 15 0 45 2 A1 0 DESCRIPTION 10 15 0 45 3 A1 45 DESCRIPTION 10 15 0 45 4 A2 20 DESCRIPTION 20 22 28 30 5 A2 22 DESCRIPTION 20 22 28 30 6 A2 28 DESCRIPTION 20 22 28 30 7 A2 30 DESCRIPTION 20 22 28 30
内容的提问来源于stack exchange,提问作者thesydne
相关产品推荐
相关产品推荐

