我有一本包含项目和转换因子(乘法)的字典。我需要从 dict 的转换值之间的“Col1”列中查找 df 最小值中的每个项目。
For ex.: for Item1:
converted Item5 = 22 * 10 = 220
converted Item6 = 2 * 100 = 200
converted Item4 = 205 * 1 = 205
Min=200
import pandas as pd
data = {'Item1': {'Item5': 10, 'Item6': 100, 'Item4': 1},
'Item2': {'Item5': 10, 'Item6': 100, 'Item4': 1},
'Item4': {'Item5': 10, 'Item6': 100, 'Item9': 1}}
data = pd.DataFrame(data)
print(data)
df=pd.DataFrame({
'Col0':['Item1','Item2','Item3','Item4','Item5','Item6'],
'Col1':[180,250,150,205,22,2],
'Col2':[190,150,150,200,18,2.5]
})
print(df)
我想要的结果:
result=pd.DataFrame({
'Item':['Item1','Item2','Item3','Item4','Item5','Item6'],
'Col1':[180,250,150,205,22,2],
'Col2':[190,150,150,200,18,2.5],
'Minc_Col1':[200,200,'NaN',200,'NaN','NaN']
})
print(result)
这是一种方法:
result = df.set_index('Col0')
new_cols = ['Item', 'Price1', 'Price2']
result = (
result.assign(
Minc_Col1=(data.mul(data.index.map(result['Col1']), axis=0).min())
)
.reset_index()
.rename(columns={f'Col{k}': v for k, v in enumerate(new_cols)})
)
输出
Item Price1 Price2 Minc_Col1
0 Item1 180 190.0 200.0
1 Item2 250 150.0 200.0
2 Item3 150 150.0 NaN
3 Item4 205 200.0 200.0
4 Item5 22 18.0 NaN
5 Item6 2 2.5 NaN
解释
df
分配给 result
,以“Col0”作为索引 (df.set_index
)。data.index
并涂抹df.index.map
,通过result['Col1']
。这将为我们提供正确的转换系数。df.mul
将 data
和 axis=0
与因子相乘,并检索 df.min
以获得每列的最小值(您的 ['Item1', 'Item2', 'Item4']
)。Series
分配给 df.assign
。df.reset_index
并使用 df.rename
重命名您的列。