gpt4 book ai didi

python - Pandas DataFrame,计算相对于当前行列值的最大列值

转载 作者:行者123 更新时间:2023-11-28 22:26:00 25 4
gpt4 key购买 nike

我有一个数据框:

df = pd.DataFrame( {
'epoch' : [1, 4, 7, 8, 9, 11, 12, 15, 16, 17],
'price' : [1, 2, 3, 3, 1, 4, 2, 3, 4, 4]
} )

epoch price
0 1 1
1 4 2
2 7 3
3 8 3
4 9 1
5 11 4
6 12 2
7 15 3
8 16 4
9 17 4

我必须创建一个应按以下方式计算的新列:

对于每一行

查找当前行的纪元(假设为 e_cur)

计算e_cur-3 = e_cur – 3(这里的三是常数,但会变)

计算价格最大值,其中 epoch >= e-3_cur 且 epoch <= e_cur

换句话说,在距当前行纪元三个纪元的行中找到最高价格。

例如:

Index=0,e_cur = epoch = 1,e_cur-3 = 1 -3 = -2,只有一个(第一)行的 epoch 在 -2 和 1 之间,所以第一行的价格是最高价

Index =6, e_cur = epoch = 12, e_cur-3 = 12 – 3 = 9, 有3行epoch在9到12之间,但index=5的行最高价格= 4。

以下是我手动计算的每一行的结果:

   epoch  price  max_price_where_epoch_is_between_e_cur-3_and_e_cur
0 1 1 1
1 4 2 2
2 7 3 3
3 8 3 3
4 9 1 3
5 11 4 4
6 12 2 4
7 15 3 3
8 16 4 4
9 17 4 4

正如你所看到的,epoch something goes an omething, but sometimes there's "holes".

如何用 pandas 计算?

最佳答案

使用滚动窗口:

In [161]: df['between'] = df.epoch.map(df.set_index('epoch')
...: .reindex(np.arange(df.epoch.min(), df.epoch.max()+1))
...: .rolling(3, min_periods=1)
...: .max()['price'])
...:

In [162]: df
Out[162]:
epoch price between
0 1 1 1.0
1 4 2 2.0
2 7 3 3.0
3 8 3 3.0
4 9 1 3.0
5 11 4 4.0
6 12 2 4.0
7 15 3 3.0
8 16 4 4.0
9 17 4 4.0

解释:

助手 DF:

In [165]: df.set_index('epoch').reindex(np.arange(df.epoch.min(), df.epoch.max()+1))
Out[165]:
price
epoch
1 1.0
2 NaN
3 NaN
4 2.0
5 NaN
6 NaN
7 3.0
8 3.0
9 1.0
10 NaN
11 4.0
12 2.0
13 NaN
14 NaN
15 3.0
16 4.0
17 4.0

In [166]: df.set_index('epoch').reindex(np.arange(df.epoch.min(), df.epoch.max()+1)).rolling(3, min_periods=1).max()
Out[166]:
price
epoch
1 1.0
2 1.0
3 1.0
4 2.0
5 2.0
6 2.0
7 3.0
8 3.0
9 3.0
10 3.0
11 4.0
12 4.0
13 4.0
14 2.0
15 3.0
16 4.0
17 4.0

关于python - Pandas DataFrame,计算相对于当前行列值的最大列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45130012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com