如何在Pandas中按条件(大于Col7)计算DataFrame指定列的最小值
问题与解决方案
需求
已实现基于字典映射列,为DataFrame添加每个Item对应列的最小值列。现需补充计算条件:仅选取所选列中大于'Col7'列的值来计算最小值。
原代码
import pandas as pd my_dict={'Item1':['Col1','Col3','Col6'], 'Item2':['Col2','Col4','Col6','Col8'] } df=pd.DataFrame({ 'Col0':['Item1','Item2'], 'Col1':[20,25], 'Col2':[89,15], 'Col3':[36,30], 'Col4':[40,108], 'Col5':[55,2], 'Col6':[35,38], 'Col7':[30,20] }) df['min']=df.apply(lambda r:r[[col for col in my_dict.get(r['Col0'], []) if col in r]].min(),axis=1)
期望结果
# 输出的DataFrame应如下 df=pd.DataFrame({ 'Col0':['Item1','Item2'], 'Col1':[20,25], 'Col2':[89,15], 'Col3':[36,30], 'Col4':[40,108], 'Col5':[55,2], 'Col6':[35,38], 'Col7':[30,20], 'min':[35,38] })
修改后的代码
只需在原代码的列筛选逻辑中,增加列值大于当前行Col7值的判断条件即可:
import pandas as pd my_dict={'Item1':['Col1','Col3','Col6'], 'Item2':['Col2','Col4','Col6','Col8'] } df=pd.DataFrame({ 'Col0':['Item1','Item2'], 'Col1':[20,25], 'Col2':[89,15], 'Col3':[36,30], 'Col4':[40,108], 'Col5':[55,2], 'Col6':[35,38], 'Col7':[30,20] }) # 新增筛选条件:仅保留大于Col7的列值 df['min'] = df.apply(lambda r: r[[col for col in my_dict.get(r['Col0'], []) if col in r and r[col] > r['Col7']]].min(), axis=1 ) print(df)
说明
- 对每个行,先根据
Col0的值从字典中获取对应列列表 - 筛选出存在于当前DataFrame中,且列值大于该行Col7值的列
- 计算这些列的最小值,赋值给
min列
内容的提问来源于stack exchange,提问作者Евгения
相关产品推荐
相关产品推荐

