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

如何为Pandas DataFrame添加字典指定列的每行最小值列?

解决方案

错误原因分析

你尝试的代码逻辑有误:my_dict的键是Item名称(如Item1、Item2),而非DataFrame的列名,因此df.columns.isin(my_dict)无法匹配到需要计算最小值的目标列,同时也没有关联每行Col0对应的Item所指定的列集合。

实现方法

方法一:逐行处理(直观易懂)

通过apply函数逐行获取当前Item对应的列名列表,提取该行对应列的值并计算最小值:

import pandas as pd
my_dict={'Item1':['Col1','Col3'],
'Item2':['Col2','Col4']
        }
df=pd.DataFrame({
            'Col0':['Item1','Item2'],
            'Col1':[20,25],
            'Col2':[89,15],
            'Col3':[26,30],
            'Col4':[40,108],
            'Col5':[55,2]
            })

# 新增min列
df['min'] = df.apply(lambda row: row[my_dict[row['Col0']]].min(), axis=1)
print(df)

运行结果:

Col0  Col1  Col2  Col3  Col4  Col5  min
0  Item1    20    89    26    40    55   20
1  Item2    25    15    30   108     2   15

方法二:向量化操作(适合大数据集)

如果DataFrame行数较多,apply效率较低,可通过列映射+转长格式+分组计算的方式实现,利用pandas向量化操作提升性能:

# 构建列名到对应Item的映射字典
col_to_item = {col: item for item, cols in my_dict.items() for col in cols}
# 提取目标列并转换为长格式
melted_df = df.melt(id_vars='Col0', value_vars=col_to_item.keys(), var_name='col', value_name='val')
# 筛选每行Item对应的列数据,分组计算最小值
min_values = melted_df[melted_df['Col0'] == melted_df['col'].map(col_to_item)].groupby(df.index)['val'].min()
# 将结果合并到原DataFrame
df['min'] = min_values

内容的提问来源于stack exchange,提问作者Евгения

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:31:01