如何在Pandas DataFrame中合并列并为每个项添加括号
问题描述
我有如下DataFrame表格:
| Name | Subjects | Grades |
|---|---|---|
| George | [Math, Science, History] | [90,82,93] |
| Kathy | [English, Science, History, Math] | [92,85,96,99] |
希望得到新增Results列后的表格:
| Name | Subjects | Grades | Results |
|---|---|---|---|
| George | [Math, Science, History] | [90,82,93] | [Math (90 grade), Science (82 grade), History (93 grade)] |
| Kathy | [English, Science, History, Math] | [92,85,96,99] | [English (92 grade), Science (85 grade), History (96 grade), Math (99 grade)] |
我已经掌握了单个列表的处理方法:
l1 = ['Math', 'Science', 'History'] l2 = [90, 82, 93] l3 = [f'({x} grade)' for x in l2] print('[' + ', '.join(f"{x} {y}" for x, y in zip(l1, l3)) + ']') # 输出:[Math (90 grade), Science (82 grade), History (93 grade)]
但不知道如何将这个逻辑应用到DataFrame的列操作中。
解决方案
可以利用Pandas的apply方法,结合lambda函数对DataFrame的每一行进行处理,把Subjects和Grades两个列表的元素一一对应拼接成目标格式:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Name': ['George', 'Kathy'], 'Subjects': [['Math', 'Science', 'History'], ['English', 'Science', 'History', 'Math']], 'Grades': [[90,82,93], [92,85,96,99]] }) # 定义处理函数,生成带方括号的字符串格式结果 def generate_results(row): elements = [f"{sub} ({grade} grade)" for sub, grade in zip(row['Subjects'], row['Grades'])] return f"[{', '.join(elements)}]" # 新增Results列 df['Results'] = df.apply(generate_results, axis=1) print(df)
如果不需要外层的方括号,希望Results列直接存储Python列表对象,可修改处理函数:
def generate_results(row): return [f"{sub} ({grade} grade)" for sub, grade in zip(row['Subjects'], row['Grades'])]
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

