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?
中取值
您可以将 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
我有两个相同大小、相同列和相同索引的数据框。
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?
中取值您可以将 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