在一个命令中进行行选择以及loc遮罩和切片

时间:2018-06-24 15:44:41

标签: python pandas

我希望能够在一个命令中进行行选择以及蒙版和切片。
目前,我使用两个步骤。

df
Out[126]: 
                   A         B         C         D
2018-06-24 -2.198394  0.224622  0.990230  0.390609
2018-06-25  0.644388 -1.196015  1.859241  0.444789
2018-06-26  0.708848  0.780761  1.599977 -0.489875
2018-06-27 -0.465428 -1.540811 -2.384975  0.460398
2018-06-28 -1.061571  1.781373 -1.934853  0.895916
2018-06-29  0.613139  0.446043 -0.061014 -1.182526
2018-06-30 -0.579179  0.630916  0.689561  0.124637
2018-07-01  0.199385  1.230230 -2.075407  1.051498
2018-07-02  0.377676  0.343647  1.226058  0.182071
2018-07-03  0.478328 -0.791613 -2.247531 -1.213415

df03 = df.iloc[0:3]

df03.loc[(df.C > 0) & (df.B > 0), 'A':'C']
Out[128]: 
                   A         B         C
2018-06-24 -2.198394  0.224622  0.990230
2018-06-26  0.708848  0.780761  1.599977

1 个答案:

答案 0 :(得分:1)

不可能,需要为cookbook中的检查索引值创建布尔掩码。

我认为您的解决方案很好,但是如果需要一种解决方案,则需要比较arange创建的numpy数组的新条件:

df = df.loc[(df.C > 0) & (df.B > 0) & (np.arange(len(df)) < 3), 'A':'C']

详细信息

print ((np.arange(len(df)) < 3))
[ True  True  True False False False False False False False]

替代:

print ((df.reset_index().index < 3))
[ True  True  True False False False False False False False]

df = df.loc[(df.C > 0) & (df.B > 0) & (df.reset_index().index < 3), 'A':'C']