我想基于条件操作(在元素上)对具有相同结构(相同索引,相同列)的多个数据框的组合来创建一个数据框.
在这里,我创建了三个具有相似结构的数据框.
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