gpt4 book ai didi

python - 分组后,在 pandas python 中找到每个组中最接近的一个

转载 作者:行者123 更新时间:2023-12-01 08:36:46 25 4
gpt4 key购买 nike

我是 pandas 的新手,并且陷入了计算中。这是我的样本 DF。我有兴趣获取每组收盘价中最接近的strike_price行。 (按日期、时间、选项类型分组)

        name      date   time      open      high       low     close       option_type  strike_price  open_opn  high_opn  low_opn  close_opn 
0 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 CE 11800 104.95 109.45 104.50 107.25
1 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 CE 11700 160.00 164.25 159.90 161.60
2 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 CE 11600 223.20 229.10 223.20 226.30
0 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 PE 11800 166.05 166.95 163.55 165.95
1 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 PE 11600 88.80 89.45 86.45 89.00
2 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 PE 11700 122.35 122.65 119.40 122.30

这是我的预期输出。

        name      date   time      open      high       low     close       option_type  strike_price  open_opn  high_opn  low_opn  close_opn 

1 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11700.15 CE 11700 160.00 164.25 159.90 161.60
2 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11700.15 PE 11700 122.35 122.65 119.40 122.30

如果收盘价为 11760,则预期卖出价为 11760。

0       NIFTY  20180903  09:16  11736.05  11736.10  11699.35  11720.15      CE              11800       104.95    109.45   104.50     107.25
0 NIFTY 20180903 09:16 11736.05 11736.10 11699.35 11720.15 PE 11800 166.05 166.95 163.55 165.95

请帮我解决这个问题。高度赞赏。

最佳答案

使用subabs首先,然后通过sort_values获得每组的最小值与 drop_duplicates :

df['diff'] = df['close'].sub(df['strike_price']).abs()

df = df.sort_values('diff').drop_duplicates(['date', 'time', 'option_type'])
print (df)
name date time open high low close option_type \
1 NIFTY 20180903 09:16 11736.05 11736.1 11699.35 11720.15 CE
2 NIFTY 20180903 09:16 11736.05 11736.1 11699.35 11720.15 PE

strike_price open_opn high_opn low_opn close_opn diff
1 11700 160.00 164.25 159.9 161.6 20.15
2 11700 122.35 122.65 119.4 122.3 20.15

另一个解决方案 DataFrameGroupBy.idxminloc :

df = df.reset_index(drop=True)
df['diff'] = df['close'].sub(df['strike_price']).abs()

df = df.loc[df.groupby(['date', 'time', 'option_type'])['diff'].idxmin()]
print (df)

name date time open high low close option_type \
1 NIFTY 20180903 09:16 11736.05 11736.1 11699.35 11720.15 CE
5 NIFTY 20180903 09:16 11736.05 11736.1 11699.35 11720.15 PE

strike_price open_opn high_opn low_opn close_opn diff
1 11700 160.00 164.25 159.9 161.6 20.15
5 11700 122.35 122.65 119.4 122.3 20.15

关于python - 分组后,在 pandas python 中找到每个组中最接近的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680607/

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