[英]Selecting the value in a row closest to zero in a pandas DataFrame with multiple columns
這個問題是這個問題的延伸:在 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
你可以做agg
:
df.abs().agg(['min','idxmin'], axis=1)
Output:
min idxmin
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
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.