将一列添加到数据框中,其中每个项目的最小值仅来自字典对应的列。如何在计算最小值时添加条件 - 如果所选列中的值大于“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)
结果应该是:
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]
})
按照您的方法
apply
,它需要布尔索引(withgt
):输出 :
收据会相当简单:
Col0
根据检索 每行的相关列my_dict
。Col7
。min
这些过滤值的。上面的代码可能如下所示:
与 Marcin 的答案类似,您可以
and r[col] > r['Col7']
在 后添加您的条件if col in r
。所以该行看起来像:您可以通过调整之前问题的答案来获取最小值和列名称,并
min
在条件导致没有匹配列的情况下传递默认值:输出(用于您的示例数据):
如果我们将条件更改为
r[col] > r['Col7']*1.2
,则输出为请注意,我使用了
NaN
和''
作为默认值,您可以使用您选择的任何值来代替它们。