我有一个带有列对 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.map
thenget_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] 删除。
我来说两句