我有两个相同大小的数据框,相同的列和相同的索引。
df1:
symbol fund1 fund2 fund3 ... ... ...
id datetime
10 2012-10-19 09:05:00 -100 0 0 50 0 0
20 2012-10-19 09:10:00 0 300 0 0 0 0
df2:
symbol fund1 fund2 fund3 ... ... ...
id datetime
10 2012-10-19 09:05:00 -0.5 0 0 0.005 0 0
20 2012-10-19 09:10:00 0 -10 0 0 0 0
仅当df1中每个元素的符号与df2中的符号不同(相反)时,我想接收一个新的数据帧,该数据帧采用df1中的值。
因此,该示例的结果将是:
df_outcome:
symbol fund1 fund2 fund3 ... ... ...
id datetime
10 2012-10-19 09:05:00 0 0 0 0 0 0
20 2012-10-19 09:10:00 0 300 0 0 0 0
我发现有一个函数:np.sign(df),我想我应该首先将此函数应用于两个表,但是我应该怎么做才能将这些值与这些“ sign”表进行比较,并且如果它们是相反的,则逐个取,取df1中的值?
答案 0 :(得分:3)
您可以将where
与np.sign
和不等式测试结合使用:
df1.where(np.sign(df1) != np.sign(df2)).fillna(0)
输出:
fund1 fund2 fund3 fund4 fund5 fund6
id datetime
10 2012-10-19 09:05:00 0.0 0.0 0.0 0.0 0.0 0.0
20 2012-10-19 09:10:00 0.0 300.0 0.0 0.0 0.0 0.0