用棋盘图案切片Pandas DataFrame

时间:2016-06-10 03:55:36

标签: python pandas

如果我有一个m×n数据帧,我怎样才能只选择构成棋盘图案上黑色方块的值(注意m可能不等于n而且可能更大,更小或等于另一个)?我试图通过构造一个布尔掩码来掩盖它,但它并不优雅。另请注意,值可能并非都是数字(可能有文本输入和列(s)或行),因此严格使用numpy可能不起作用。

1 个答案:

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