2016-06-10 75 views
1

如果我有一个mxn数据帧,我怎么才能选择组成棋盘格上的黑色方格的值(注意m可能不等于n,也可能是更大,更小,或等于另一个)?我试图通过构建一个布尔掩码来掩盖它,但它并不优雅。另外请注意,这些值可能不是全部都是数字(可能有文本和列或行),严格使用numpy可能不起作用。用棋盘格式切片熊猫数据框

回答

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]])