我的 df 看起来像这样:
code date type strike settlement
0 CBT_21_G2015_S 2015-01-02 C 126.2 1.343750
1 CBT_21_G2015_S 2015-01-02 P 131.7 4.359375
2 CBT_21_G2015_S 2015-01-02 C 102.5 24.671875
3 CBT_21_G2015_S 2015-01-02 P 110.5 0.015625
4 CBT_21_G2015_S 2015-01-02 P 101.2 0.015625
5 CBT_21_G2015_S 2015-01-02 C 140.5 0.015625
我希望通过执行以下操作将罢工更改为四分之一罢工:if df['strike'] % 0.25 != 0 add 0.05。
期望的输出:
code date type strike settlement
0 CBT_21_G2015_S 2015-01-02 C 126.25 1.343750
1 CBT_21_G2015_S 2015-01-02 P 131.75 4.359375
2 CBT_21_G2015_S 2015-01-02 C 102.5 24.671875
3 CBT_21_G2015_S 2015-01-02 P 110.5 0.015625
4 CBT_21_G2015_S 2015-01-02 P 101.25 0.015625
5 CBT_21_G2015_S 2015-01-02 C 140.5 0.015625
请问最简单/最快的方法是什么?
请您参考如下方法:
np.ceil 的一点数学魔法 -
df['strike'] = np.ceil(df.strike * 4) / 4
df
code date type strike settlement
0 CBT_21_G2015_S 2015-01-02 C 126.25 1.343750
1 CBT_21_G2015_S 2015-01-02 P 131.75 4.359375
2 CBT_21_G2015_S 2015-01-02 C 102.50 24.671875
3 CBT_21_G2015_S 2015-01-02 P 110.50 0.015625
4 CBT_21_G2015_S 2015-01-02 P 101.25 0.015625
5 CBT_21_G2015_S 2015-01-02 C 140.50 0.015625
它真的很快,正如时间显示的那样。
df = pd.concat([df] * 100000, ignore_index=True)
%timeit np.ceil(df.strike.values * 4) / 4
5.1 ms ± 60.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
