Pandas:根据关键列中的最小值选择相应的值列

卡罗普

我有一个带有列对 x_1 & x_2 的 Pandas DataFrame,例如:

df = pd.DataFrame(
    {
        'A_1': [20, 30, 500],
        'A_2': [40, 60, 1000],
        'B_1': [35, 12, 600],
        'B_2': [70, 24, 1200],
    }
)
df

    A_1  A_2  B_1  B_2
0   20   40   35   70
1   30   60   12   24
2   500  1000 600  1200

列对存储在字典中。

comp_cols = {
    'A_1': 'A_2',
    'B_1': 'B_2',
}

现在,对于每一行,我想根据键列 [A_1, B_1] 的最小值从值列中获取相应的值。

这是我的“笨拙”解决方案。

df['min_1_col'] = df[comp_cols.keys()].idxmin(axis=1)
df['min_2_val'] = df.apply(lambda x: x[comp_cols[x['min_1_col']]], axis=1)
df

    A_1  A_2   B_1  B_2   min_1_col  min_2_val
0   20   40    35   70    A_1        40
1   30   60    12   24    B_1        24
2   500  1000  600  1200  A_1        1000


在不添加辅助列的情况下,有没有更优雅的聪明方法?

谢谢!卡罗

亨利·埃克

我们可以使用 numpy 索引从 DataFrame 中进行选择。我们只需要idxmin使用Series.mapthenget_indexer从列转换为关联的列,以获取可从 DataFrame 中选择的索引values

df['min_2_val'] = df.values[
    df.index,
    df.columns.get_indexer(df[comp_cols.keys()].idxmin(axis=1).map(comp_cols))
]

df

   A_1   A_2  B_1   B_2  min_2_val
0   20    40   35    70         40
1   30    60   12    24         24
2  500  1000  600  1200       1000

设置:

import pandas as pd

df = pd.DataFrame(
    {
        'A_1': [20, 30, 500],
        'A_2': [40, 60, 1000],
        'B_1': [35, 12, 600],
        'B_2': [70, 24, 1200],
    }
)

comp_cols = {
    'A_1': 'A_2',
    'B_1': 'B_2',
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据我选择的列变化的滑块输入中的最大值和最小值

Pandas/yfinance - 在相应行的新列中插入一列的最大值/最小值

根据一列的最小值选择行

如何根据R中列的最小值选择具有dplyr / tidyvese的列

根据多列中的最小值选择多列(毫秒访问)

根据指定列中的最小值从数据框中获取X行;并随机选择领带

选择求和列,然后从列中获取最小值

使用 pandas 根据其他两列的类别级别查找列中的最小值

在3个Pandas列中选择3个值中的最小值

选择最小值及其在mysql中的整个列

根据列的最小值选择两个列的值

如何根据其他 2 列选择 1 列的最大值和最小值?

Pandas GroupBy并选择特定列中具有最小值的行

Pandas 数据框从列中减去组最小值

在Pandas的多个日期时间列中获取最小值

Pandas中的“日期的最大值/最小值”列,列中包含nan值

根据另一列的最小值选择一列

根据R中另一列的最小值获得一列的对应值

Python Pandas:根据其他列中的唯一标识符创建具有最小值的新列

列中的SQL Server最小值

根据分组列返回最小值的所有列

为列的每个值选择最小值

如何根据熊猫中其他两列中的查找值分配最小值?

如何根据第一列作为ID选择每组中最小值的行?

如何根据数据框另一列中的条件在列中查找最小值?

选择A列的最小值,其中B列= 1

根据列值对行进行分组,并使行的最小值保持在R中

根据另一列中的字符保留最小值或最大值

pandas DataFrame:列中相同符号的值相加的最大值和最小值