Python 获取列子集中与条件相关的行的最大值
我有一个如下所示的数据帧: 造假者 -5 -4 -3 -2 -1 0 1. 2. 3. 4. 5. 1. 37 14 17 29 31 34 32 31 21 17 18 2. 12 13 12 16 30 33 37 32 32 15 42 3. 40 16 29 31 36 32 30 19 16 15 12 4. 12 14 12 28 28 30 29 27 16 18 33 5. 12 13 16 17 28 32 33 30 29 17 35Python 获取列子集中与条件相关的行的最大值,python,pandas,Python,Pandas,我有一个如下所示的数据帧: 造假者 -5 -4 -3 -2 -1 0 1. 2. 3. 4. 5. 1. 37 14 17 29 31 34 32 31 21 17 18 2. 12 13 12 16 30 33 37 32 32 15 42 3. 40 16 29 31 36 32 30 19 16 15 12 4. 12 14 12 28 28 30 29 27 16 18 33 5. 12 13 16 17 28 32 33 30 29 17 35 您可以使用布尔索引和loc来过滤-2到2
您可以使用
布尔索引
和loc
来过滤-2
到2
范围内的列,然后沿轴=1使用idxmax
:
c = df.columns.astype(int)
df['MaxVal_Dist'] = df.loc[:, (c >= -2) & (c <= 2)].idxmax(1)
您可以尝试:
[1159]中的:cols=[i代表df.columns[1:]如果-2这对我想做的事情非常有效!谢谢Shubham。对于所有像我一样迷路的人,如果你的数字有小数,它也会起作用。另外,确保你的第一行是标题!我的不是,所以一开始它不起作用。我遵循这个:这对我想做的事情也非常有效!谢谢Mayank。对所有的人就像我一样,如果你的数字有小数,它也会起作用。另外,请确保你的第一行是标题!我的不是,因此它最初不起作用。我遵循以下步骤:
FakeDist -5 -4 -3 -2 -1 0 1 2 3 4 5 MaxVal_Dist
1 37 14 17 29 31 34 32 31 21 17 18 0
2 12 13 12 16 30 33 37 32 32 15 42 1
3 40 16 29 31 36 32 30 19 16 15 12 -1
4 12 14 12 28 28 30 29 27 16 18 33 0
5 12 13 16 17 28 32 33 30 29 17 35 1
In [1159]: cols = [i for i in df.columns[1:] if -2 <= int(i) <= 2]
In [1161]: df['MaxVal_Dist'] = df[cols].idxmax(axis=1)
In [1162]: df
Out[1162]:
FakeDist -5 -4 -3 -2 -1 0 1 2 3 4 5 MaxVal_Dist
0 1 37 14 17 29 31 34 32 31 21 17 18 0
1 2 12 13 12 16 30 33 37 32 32 15 42 1
2 3 40 16 29 31 36 32 30 19 16 15 12 -1
3 4 12 14 12 28 28 30 29 27 16 18 33 0
4 5 12 13 16 17 28 32 33 30 29 17 35 1