微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-对多个数据框的熊猫元素条件操作

我想基于条件操作(在元素上)对具有相同结构(相同索引,相同列)的多个数据框的组合来创建一个数据框.

在这里,我创建了三个具有相似结构的数据框.

df1 = pd.DataFrame(np.random.rand(5,3), columns=['a','b','c'],index = pd.date_range(start='2000.01.01', periods=5, freq='D'))
df2 = pd.DataFrame(np.random.rand(5,3), columns=['a','b','c'],index = pd.date_range(start='2000.01.01', periods=5, freq='D'))
df3 = pd.DataFrame(np.random.rand(5,3), columns=['a','b','c'],index = pd.date_range(start='2000.01.01', periods=5, freq='D'))

df1
                   a         b         c
2000-01-01  0.457567  0.157506  0.185594
2000-01-02  0.709991  0.486635  0.839173
2000-01-03  0.503184  0.640214  0.895055
2000-01-04  0.940231  0.591708  0.019716
2000-01-05  0.246132  0.596872  0.437000

df2
                   a         b         c
2000-01-01  0.722588  0.696100  0.176172
2000-01-02  0.275177  0.162525  0.347674
2000-01-03  0.248735  0.887237  0.175126
2000-01-04  0.444136  0.337881  0.830616
2000-01-05  0.526365  0.803296  0.574811

df3 
                   a         b         c
2000-01-01  0.392965  0.107987  0.139133
2000-01-02  0.751523  0.658844  0.174854
2000-01-03  0.509276  0.380294  0.406262
2000-01-04  0.669822  0.079491  0.233737
2000-01-05  0.659077  0.094545  0.826730

这是我的伪代码

df4 = if (df1 > 0.5 and df2 <0.3 and df3 > 0.6, 1, 0)

最简单,最有效的代码是什么?

解决方法:

大熊猫

(df1.gt(.5) & df2.lt(.3) & df3.gt(.6)).astype(int)

            a  b  c
2000-01-01  0  0  0
2000-01-02  1  0  0
2000-01-03  0  0  0
2000-01-04  0  0  0
2000-01-05  0  0  0

与一些numpy v1

pd.DataFrame(
    (
        (df1.values > .5) &
        (df2.values < .3) &
        (df3.values > .6)
    ).astype(int),
    df1.index, df1.columns
)

            a  b  c
2000-01-01  0  0  0
2000-01-02  1  0  0
2000-01-03  0  0  0
2000-01-04  0  0  0
2000-01-05  0  0  0

与一些numpy v2

pd.DataFrame(
    np.where(
        (df1.values > .5) &
        (df2.values < .3) &
        (df3.values > .6), 1, 0
    ),
    df1.index, df1.columns
)

            a  b  c
2000-01-01  0  0  0
2000-01-02  1  0  0
2000-01-03  0  0  0
2000-01-04  0  0  0
2000-01-05  0  0  0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐