Python 布尔的整df布尔索引
我有168行x 60列的真/假df 样品在这里 DatedfPython 布尔的整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
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