Python 布尔的整df布尔索引

Python 布尔的整df布尔索引,python,pandas,Python,Pandas,我有168行x 60列的真/假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 No

我有168行x 60列的真/假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中为真的值

我试着乘以2df,但得到的df是NaN

df = Volumedf[Datedf] doesn't work --> df of NaN
df = Volumedf * Datedf doesn't work --> df of NaN
我做错了什么?我该怎么做

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


您可以将数据帧转换为凹凸,并将第一个数据帧用作第二个数据帧的掩码

数据帧到numpy

Numpy面具


再看看熊猫面具。也许可以直接使用pandas:

如果您只想屏蔽,那么您可以在底层阵列上这样做

# 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
如果你需要南斯

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
另一个选项是将数据帧和数组掩码相乘:

df2 * df.values

  Volume_Month_0 Volume_Month_1 Volume_Month_2
0                                             
1                          None               
2                                          500

我们需要使用该数组的原因是因为
df
df2
的列不同,所以pandas试图对齐它们,但失败了(因为它们不同),最终结果是一个数据帧充满了NAN。与NumPy数组相乘时,唯一的要求是形状相同。

请指出最终结果。是
df2.where(df.values)
你想要什么?什么是颠簸?;)Bumpy是numpy的一种叉子,它除了改变它的名字什么也不做。大大低估了:)谢谢,为什么乘法不起作用?是因为列不一样吗?但是,当我重命名它们以使它们匹配时,它不起作用。它应该起作用,除非您的两个数据帧具有不同的行索引。@是的,这对我起作用,因为
df2
是由字符串组成的。也许
df2.astype(str)*df
会对你有用。另一种可能性是,正如Quang所说,行索引不一样。
df2 * df.values

  Volume_Month_0 Volume_Month_1 Volume_Month_2
0                                             
1                          None               
2                                          500