将一列添加到数据框中,其中每个项目的最小值仅来自字典对应的列。如何在计算最小值时添加条件 - 如果所选列中的值大于“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]
})
收据会相当简单:
Col0
检索每行的相关列。Col7
中的值的值。min
。代码中的表达可能如下所示:
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]
})
# Adding the 'min' column by applying
# a function across each row
df['min'] = df.apply(lambda row: min([row[col] for col in my_dict.get(row['Col0'], []) if col in row and row[col] > row['Col7']]), axis=1)
print(df)