如何在DataFrame python中找到最大值后的最小值?



想象以下数据集:

data = {"row1":[1,2,3,4,5], "row2" : [2,3,4,1,3], "row3":[3,4,2,0,0] }
data = pd.DataFrame(data)
data = data.T
print(data)

0  1  2  3  4
row1  1  2  3  4  5
row2  2  3  4  1  3
row3  3  4  2  0  0

我想找到出现在max value之后的min value。所以在最大值之前存在的任何最小值都不是我很感兴趣。我写了下面的代码:

data["Max_Value"] = data.max(axis=1)
data["Max_Index"] = data.idxmax(axis=1)
dt["Min_Value"] = dt.iloc[:, dt["Max_Index"]:].min(axis=1)
dt["Min_Index"] = dt.iloc[:, dt["Max_Index"]:].idxmin(axis=1)

dt["Max_Index"]:]是我尝试用动态的方式得到最大值的索引。这样我就能找到在这部分数据之后出现的最小值。但它没有像我想的那样工作。

我希望有一个这样的结果:

0  1  2  3  4  Max_Value   Max_Index  Min_Value  Min_Index
row1  1  2  3  4  5      5           4         5          4
row2  2  3  4  1  3      4           2         1          3
row3  3  4  2  0  0      4           1         0          3

它不起作用,我也不想使用循环,我的错误是什么?

根据最大值动态获取最小值和索引

要基于一行中的最大值获得最小值及其索引,您需要将该行中的数据作为列表提取出来。然后对列表进行操作,得到最小值和索引值。

要做到这一点,可以使用下面的代码:
import pandas as pd
data = {"row1":[1,2,3,4,5], "row2" : [2,3,4,1,3], "row3":[3,4,2,0,0] }
data = pd.DataFrame(data)
data = data.T
print(data)
data["Max_Value"] = data.max(axis=1)
data['Max_Val_Index'] = data.iloc[:5].idxmax(axis=1)
def custom_find_min(x):
y = x[x.index(x[5]):5]
return min(y)
def custom_find_min_idx(x):
y = x[x[6]:5]
return x.index(x[5]) + y.index(x[-1])
data["Min_Value"]   = data.apply(lambda x: custom_find_min(x.tolist()),axis=1)
data["Min_Val_Idx"] = data.apply(lambda x: custom_find_min_idx(x.tolist()),axis=1)
print (data)

或者,您可以跳过函数定义并在同一行中完成所有操作。下面是它的代码:

data["Min_Value"] = data.apply(lambda x: min(x.tolist()[x['Max_Val_Index']:5]),axis=1)
data["Min_Val_Index"] = data.apply(lambda x: x['Max_Val_Index'] + x.tolist()[x['Max_Val_Index']:5].index(x['Min_Value']),axis=1)

这个的输出将是:

原始DataFrame:

0  1  2  3  4
row1  1  2  3  4  5
row2  2  3  4  1  3
row3  3  4  2  0  0

update DataFrame with Max, Max Index, Dynamic Min, Dynamic Min Index.

0  1  2  3  4  Max_Value  Max_Val_Index  Min_Value  Min_Val_Idx
row1  1  2  3  4  5          5              4          5            4
row2  2  3  4  1  3          4              2          1            3
row3  3  4  2  0  0          4              1          0            3

为了保留历史记录,我保留了下面的部分。

Edit ver# 1: Get Min &

回答问题的早期版本。找到最小值& &;每一行的最大值

您应该使用iloc并给出列的范围。

import pandas as pd
data = {"row1":[1,2,3,4,5], "row2" : [2,3,4,1,3], "row3":[3,4,2,0,0] }
data = pd.DataFrame(data)
data = data.T
print(data)
data["Max_Value"] = data.max(axis=1)
data['Max_Val_Index'] = data.iloc[:5].idxmax(axis=1)
data["Min_Value"] = data.min(axis=1)
data['Min_Val_Index'] = data.iloc[:5].idxmin(axis=1)
print (data)

原始DataFrame:

0  1  2  3  4
row1  1  2  3  4  5
row2  2  3  4  1  3
row3  3  4  2  0  0

更新DataFrame与最小,最大和idx为Min &马克斯。

0  1  2  3  4  Max_Value  Max_Val_Index  Min_Value  Min_Val_Index
row1  1  2  3  4  5          5              4          1              0
row2  2  3  4  1  3          4              2          1              3
row3  3  4  2  0  0          4              1          0              3

最新更新