Pandas选择保持与原始DataFrame相同的形状

时间:2014-06-15 11:12:20

标签: python pandas selection dataframe

我正在尝试从具有多布尔条件的DataFrame中进行选择,以保持DataFrame的原始大小。

假设我有以下DataFrame:

>>> import pandas as pd
>>> from random import randint
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
                   'B': [randint(1, 9)*10 for x in xrange(10)],
                   'C': [randint(1, 9)*100 for x in xrange(10)]})
>>> df
   A   B    C
0  3  40  100
1  6  30  200
2  7  70  800
3  3  50  200
4  7  50  400
5  4  10  400
6  3  70  500
7  8  30  200
8  3  40  800
9  6  60  200

我想选择10< B< 70而C = 200而不改变DataFrame大小。 我试过了查询功能:

df.query('10 < B < 70 and C == 200')

我得到了这个:

   A   B    C
1  6  30  200
3  3  50  200
7  8  30  200
9  6  60  200

但我想要这个:

   A   B     C
0  3  40   NaN
1  6  30   200
2  7  NaN  NaN
3  3  50   200
4  7  50   NaN
5  4  NaN  NaN
6  3  NaN  NaN
7  8  30   200
8  3  40   NaN
9  6  60   200

我知道df.where函数,但显然不可能申请列,它只适用于所有DataFrame。

提前致谢。

1 个答案:

答案 0 :(得分:1)

import numpy as np
df.B[(df.B < 10) | (df.B > 70)] = np.nan
df.C[df.C != 200] = np.nan