我有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
答案 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
我们需要使用数组的原因是因为df
和df2
的列不同,所以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