布尔值与布尔值的完整索引

时间:2019-06-11 16:30:14

标签: python pandas

我有168行x 60列True / False的df

在这里采样

Datedf

Date_Month_0    Date_Month_1    Date_Month_2
0   False   False   False
1   False   True    False
2   False   False   True    

我有另一个形状相同的df,即168行x 60列浮点数

示例在这里:Volumedf

Volume_Month_0  Volume_Month_1  Volume_Month_2
0   None    1000    1
1   2000    None    None
2   2000    2000    500 

我正在尝试使用整个Datedf进行布尔索引。我只想在第一个df中保留True值。

我尝试将2 df相乘,但得到NaN的df

df = Volumedf[Datedf] doesn't work --> df of NaN
df = Volumedf * Datedf doesn't work --> df of NaN

我做错了什么?我该怎么办?

我希望我的最终结果是:(NaN也可以为空)

    1       2       3
0   NaN     NaN     NaN
1   NaN     None    NaN
2   NaN     NaN     500 

2 个答案:

答案 0 :(得分:2)

如果您只想屏蔽,那么您可以在基础数组上进行屏蔽,

# pandas >=0.24
df2.where(df.to_numpy(), '')
# older versions
df2.where(df.values, '')

  Volume_Month_0 Volume_Month_1 Volume_Month_2
0                                             
1                          None               
2                                          500

如果您需要NaN,

df2.where(df.to_numpy())

  Volume_Month_0 Volume_Month_1 Volume_Month_2
0            NaN            NaN            NaN
1            NaN           None            NaN
2            NaN            NaN            500

另一种选择是将DataFrame和数组掩码相乘:

df2 * df.values

  Volume_Month_0 Volume_Month_1 Volume_Month_2
0                                             
1                          None               
2                                          500

我们需要使用数组的原因是因为dfdf2的列不同,所以pandas尝试将它们对齐并失败了(因为它们不同),最终结果是一个充满NaN的DataFrame。与NumPy数组相乘时,唯一的要求是形状必须相同。

答案 1 :(得分:0)

您可以将数据框转换为凹凸不平,然后将第一个用作第二个蒙版。

将DataFrame转换为numpy https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html

Numpy面膜 https://docs.scipy.org/doc/numpy/reference/maskedarray.html

也看看熊猫面具。也许直接用熊猫是可能的:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mask.html