Pandas 从字典中添加最小值列

问题描述 投票:0回答:1

我有一本包含项目和转换因子(乘法)的字典。我需要从 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)
python pandas
1个回答
0
投票

这是一种方法:

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
    重命名您的列。
© www.soinside.com 2019 - 2024. All rights reserved.