+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

基于布尔更改pd.df列中的值的向量化解决方案

发布于2020-06-01 21:55     阅读(441)     评论(0)     点赞(28)     收藏(5)


我的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

我希望通过执行以下操作将罢工更改为四分之一罢工:如果df ['strike']%0.25!= 0则添加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)


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/400995/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)