isin
构造一个 Series 结构:
>> import pandas as pd
>> import numpy as np
>> s = pd.Series(data=np.arange(10,15), index=list('abcde'))
>> s
a 10
b 11
c 12
d 13
e 14
dtype: int32
s.isin
判断 Series 中的值是否在指定范围内:
>> s.isin([10,12,14])
a True
b False
c True
d False
e True
dtype: bool
利用返回的布尔索引,可以将对应的值取出来:
>> s[s.isin([10,12,14])]
a 10
c 12
e 14
dtype: int32
isin 还可以应用在索引上,即使是多级索引。下面,首先构造一个多级索引的 Series:
>> s2 = pd.Series(data=np.random.randint(0,10,6), index=pd.MultiIndex.from_product([[0,1],['a','b','c']]))
>> s2
0 a 9
b 2
c 5
1 a 4
b 0
c 1
dtype: int32
在多级索引上使用 isin:
>> s2.index.isin([(1,'a'),(0,'c')])
array([False, False, True, True, False, False])
利用返回的布尔数组,可以取出相应的值:
>> s2[s2.index.isin([(1,'a'),(0,'c')])]
0 c 5
1 a 4
dtype: int32
where
where:Replace values where the condition is False.
首先构造一个 DataFrame:
>> df = pd.DataFrame(np.random.randn(8,4), index=pd.date_range('20211013', periods=8), columns=['A','B','C','D'])
>> df
df.where(df<0)
默认返回的 DataFrame 将使用 NAN 替换不满足条件处的值。
>> df.where(df<0)
也可以指定操作,比如将不满足条件处的值取反:
>> df.where(df<0, -df)
query
query: Query the columns of a DataFrame with a boolean expression.
首选构造一个随机的 DataFrame:
>> df = pd.DataFrame(np.random.rand(10,3), columns=list('abc'))
>> df
找出 a
列的值比 b
列小的记录:
>> df.query('a
找出 a
列的值比 b
列小,并且 b
列的值又小于 c
列的记录:
>> df.query('a