我正在尝试从具有多布尔条件的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。
提前致谢。
答案 0 :(得分:1)
import numpy as np
df.B[(df.B < 10) | (df.B > 70)] = np.nan
df.C[df.C != 200] = np.nan