我有一个带有项目\列名称的字典和一个带有来自字典和其他列的列的 df 。如何将列添加到 df ,其中每个项目的最小值仅来自 dict 对应的列?
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]
})
df['min']=?
我试过
df['min']=df[df.columns[df.columns.isin(my_dict)]].min(axis=1),
但没有成功。
您可以使用
apply
一个函数,从字典中读取适当的列名称(如果没有匹配,则返回空列表),然后获取指定列的最小值:输出:
如果可能
my_dict
包含数据框中不存在的列名称,您可以在函数中检查。例如:输出:
如果需要,您甚至可以获得列名称:
输出:
您可以使用字典来计算
Item
和的存在表Col
。然后使用该表来屏蔽原始数据帧。另一种方法使用
groupby.apply
. 如果该值可以重复,则这样做的优点是可以同时索引共享相同“Col0”值的所有行。输出: