Select 个值基于另一个数据框

Select values based on another dataframe

我有两个相同大小、相同列和相同索引的数据框。

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?

中取值

您可以将 wherenp.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