如果我有一个m×n数据帧,我怎样才能只选择构成棋盘图案上黑色方块的值(注意m可能不等于n而且可能更大,更小或等于另一个)?我试图通过构造一个布尔掩码来掩盖它,但它并不优雅。另请注意,值可能并非都是数字(可能有文本输入和列(s)或行),因此严格使用numpy可能不起作用。
答案 0 :(得分:1)
您可以使用ogrid到create a "checkerboard":
In [11]: coords = np.ogrid[0:2, 0:3]
In [12]: checkerboard = (coords[0] + coords[1]) % 2 == 0
# use != for an inverted board
In [13]: checkerboard
Out[13]:
array([[ True, False, True],
[False, True, False]], dtype=bool)
考虑到这一点,你可以NaN所有其他值(我认为你的意思是"选择" /掩码):
In [14]: df = pd.DataFrame([[1, 2, 3], [4, 5 ,6]], columns=list('ABC'))
In [15]: df.where(checkerboard)
Out[15]:
A B C
0 1.0 NaN 3.0
1 NaN 5.0 NaN
注意:您也可以使用整数执行此操作:
In [21]: (coords[0] + coords[1]) % 2
Out[21]:
array([[0, 1, 0],
[1, 0, 1]])
In [22]: ~(coords[0] + coords[1]) % 2
Out[22]:
array([[1, 0, 1],
[0, 1, 0]])