You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需循环将DataFrame中的字典转换为新表并生成指定列

当然有不用手动写循环的办法!用Pandas自带的apply方法结合字典操作就能轻松搞定,代码简洁还比手动循环高效。

先给你举个具体的例子,假设你的DataFrame长这样:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'code': [123, 456],
    'people': [
        {'Alice': 165, 'Bob': 180, 'Charlie': 175},
        {'David': 170, 'Eve': 185, 'Frank': 178}
    ]
})

接下来直接用两行代码就能生成你要的两列:

# 提取身高最高的人物名称
df['highest_guy'] = df['people'].apply(lambda x: max(x, key=x.get))
# 提取对应的身高数值
df['highest_guy_size'] = df['people'].apply(lambda x: max(x.values()))

解释一下这两行的逻辑:

  • max(x, key=x.get):针对每行的字典x,x.get会返回键对应的值,max函数会根据这个值的大小,返回最大的那个键(也就是身高最高的人)
  • max(x.values()):直接取字典里所有值的最大值,也就是最高的身高数值

处理后的结果就是你想要的格式:

code                            people highest_guy  highest_guy_size
0   123  {'Alice': 165, 'Bob': 180, 'Charlie': 175}          Bob                180
1   456  {'David': 170, 'Eve': 185, 'Frank': 178}           Eve                185

如果你的数据量很大,还可以试试另一种写法(不过这种适合字典键比较规整的情况):

# 把字典转成Series后取索引最大值和数值最大值
people_df = df['people'].apply(pd.Series)
df['highest_guy'] = people_df.idxmax(axis=1)
df['highest_guy_size'] = people_df.max(axis=1)

两种方法都不用写显式的for循环,Pandas内部会做优化处理,比手动遍历行效率高不少。

内容的提问来源于stack exchange,提问作者aabujamra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:03:44