【发布时间】:2016-10-18 02:05:24
【问题描述】:
我有关注DataFrame:
A B
0 1 5
1 2 3
2 3 2
3 4 0
4 5 1
如何通过A 列的条件值获取?
例如所有大于 3 且小于 6 的值。
【问题讨论】:
标签: python pandas dataframe conditional-statements
我有关注DataFrame:
A B
0 1 5
1 2 3
2 3 2
3 4 0
4 5 1
如何通过A 列的条件值获取?
例如所有大于 3 且小于 6 的值。
【问题讨论】:
标签: python pandas dataframe conditional-statements
您可以使用boolean indexing,或者使用间隔端点的条件
df[(df.A > 3) & (df.A < 6)]
或方便的方法.between(),在幕后转换为上述(因此速度非常慢),您需要注意默认情况下包含限制:
df[df.A.between(4, 5)] # uses inclusive limits
得到:
A B
3 4 0
4 5 1
【讨论】:
使用between(可以使用参数inclusive=False)和boolean indexing:
print (df[df.A.between(4,5)])
示例:
df = pd.DataFrame({'A': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5,5: 6},
'B': {0: 5, 1: 3, 2: 2, 3: 0, 4: 2, 5: 1}})
print (df)
A B
0 1 5
1 2 3
2 3 2
3 4 0
4 5 2
5 6 1
print (df[df.A.between(4,5)]) #default inclusive=True
A B
3 4 0
4 5 2
print (df[df.A.between(3,6, inclusive=False)])
A B
3 4 0
4 5 2
时间安排相同:
df = pd.concat([df]*10000).reset_index(drop=True)
In [427]: %timeit (df[df.A.between(3,6, inclusive=False)])
The slowest run took 4.72 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 1.32 ms per loop
In [428]: %timeit (df[(df.A>3) & (df.A<6)])
1000 loops, best of 3: 1.31 ms per loop
【讨论】: