这个问题是这个问题的扩展:在pandas DataFrame 中选择最接近零的行中的值
但是将其扩展为包括多个列。这可以在一行中完成并添加它所来自的列名吗?
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(-15,15,size=(6,4)).reshape(6,4), columns=list('abcd'))
a b c d
0 -2 -15 -5 -6
1 14 -3 5 -14
2 -5 -13 0 -5
3 -13 4 -10 6
4 13 -9 4 2
5 0 -7 -10 6
预期:
closest_to_0_a_b_c_d column
0 -2 a
1 -3 b
2 0 c
3 4 b
4 2 d
5 0 a
添加到@QuangHoang的答案中,您还可以使用lookup
:返回负值
输入:
a b c d
0 3 4 -14 -12
1 -6 -8 -9 8
2 12 -15 7 0
3 13 -7 2 -12
4 -14 -15 -7 -14
5 13 -11 1 9
输出:
df1 = df.abs().agg(['min','idxmin'], axis=1)
df1['min'] = df.lookup(df1.index, df1['idxmin'])
df1
Out[1]:
min idxmin
0 3 a
1 -6 a
2 0 d
3 2 c
4 -7 c
5 1 c
并重命名列:
df1.columns = [f'closest_to_{"_".join(df.columns)}', 'column']
df1
Out[2]:
closest_to_a_b_c_d column
0 3 a
1 -6 a
2 0 d
3 2 c
4 -7 c
5 1 c
您可以执行agg
:
df.abs().agg(['min','idxmin'], axis=1)
输出:
min idxmin
0 2 a
1 3 b
2 0 c
3 4 b
4 2 d
5 0 a