如何将Pandas DataFrame中A列值与B列列表元素拼接生成新列?
Pandas DataFrame列值拼接实现方案
原始数据结构
| ColumnA | Column B | |----------|----------| | prefix_1 | [A, B] | | prefix_2 | [C, D] |
目标转换结果
| ColumnA | Column B | Column C | |----------|----------|--------------------------| | prefix_1 | [A, B] | [prefix_1-A, prefix_1-B] | | prefix_2 | [C, D] | [prefix_2-C, prefix_2-D] |
你尝试过的无效代码
df['ColumnC'] = df['ColumnB'].str.split(',').apply(lambda x: [df['ColumnA'] + '-' + e.strip() for e in x]).tolist()
问题原因与解决方法
你写的代码之所以无效,是因为lambda里调用df['ColumnA']取的是整个列的数据集,不是当前行对应的ColumnA值,所以没法完成逐行的拼接操作。下面给两种可行的实现方式:
方式1:逐行处理(最直接)
用apply(axis=1)遍历每一行,拿到当前行的ColumnA和Column B值进行拼接:
df['ColumnC'] = df.apply(lambda row: [f"{row['ColumnA']}-{item}" for item in row['Column B']], axis=1)
方式2:拆分后聚合(适合复杂场景)
如果Column B是列表类型(不是字符串格式的假列表),可以先把列表拆分成多行,拼接后再重新聚合回列表:
# 把列表拆分成单行 temp_df = df.explode('Column B') # 拼接生成目标字符串 temp_df['ColumnC'] = temp_df['ColumnA'] + '-' + temp_df['Column B'] # 按ColumnA分组,把数据重新聚合成列表 df = temp_df.groupby('ColumnA', as_index=False).agg({'Column B': list, 'ColumnC': list})
补充说明:如果你的Column B是字符串格式(比如"[A, B]"),不是真正的Python列表,需要先转换成列表类型:
import ast df['Column B'] = df['Column B'].apply(ast.literal_eval)
内容的提问来源于stack exchange,提问作者nick_alice1993
相关产品推荐
相关产品推荐

