【发布时间】:2018-12-11 13:48:43
【问题描述】:
我有一个这样的数据框:
index value idxmin idxmax
0 300 nan nan
1 200 nan nan
2 100 nan nan
3 200 0 2
4 300 1 2
5 400 1 3
6 500 2 5
7 600 4 5
8 700 4 7
9 800 5 8
10 900 5 8
11 800 7 9
12 700 8 10
13 600 10 12
14 500 12 13
15 400 12 14
16 500 12 15
17 400 13 15
18 500 13 16
19 600 15 17
20 700 15 19
我想创建一个新列(最大值),它将返回行范围的“值”列的最大值。 示例:对于第 9 行,第 5 到第 8 行的“值”的最大值为 800。
我做了这段代码,实际运行但效率不高
df['maxvalue'] = df.apply(lambda x : (df['value'].loc[x['idxmin']:x['idxmax']].max(), axis=1)
您有更高效的代码来执行该功能吗?
我期望的结果(最后一栏):
index value idxmin idxmax maxvalue
0 300 nan nan nan
1 200 nan nan nan
2 100 nan nan nan
3 200 0 2 300
4 300 1 2 200
5 400 1 3 200
6 500 2 5 400
7 600 4 5 400
8 700 4 7 600
9 800 5 8 700
10 900 5 8 700
11 800 7 9 800
12 700 8 10 900
13 600 10 12 900
14 500 12 13 700
15 400 12 14 700
16 500 12 15 700
17 400 13 15 600
18 500 13 16 600
19 600 15 17 500
20 700 15 19 600
非常感谢您的帮助!!
【问题讨论】:
-
您的问题存在冲突。您声明第 9 行,“值”rows5 到 8 的最大值为 800。但是,在您的预期输出中,您有 700。我怀疑 700 是正确的。
-
嗨斯科特!你是对的,这是一个错误。理解:第 5 行到第 8 行的最大值为 700。
标签: python pandas python-2.7 dataframe