1
如果我有一個mxn數據幀,我怎麼才能選擇組成棋盤格上的黑色方格的值(注意m可能不等於n,也可能是更大,更小,或等於另一個)?我試圖通過構建一個布爾掩碼來掩蓋它,但它並不優雅。另外請注意,這些值可能不是全部都是數字(可能有文本和列或行),嚴格使用numpy可能不起作用。用棋盤格式切片熊貓數據框
如果我有一個mxn數據幀,我怎麼才能選擇組成棋盤格上的黑色方格的值(注意m可能不等於n,也可能是更大,更小,或等於另一個)?我試圖通過構建一個布爾掩碼來掩蓋它,但它並不優雅。另外請注意,這些值可能不是全部都是數字(可能有文本和列或行),嚴格使用numpy可能不起作用。用棋盤格式切片熊貓數據框
您可以使用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]])