我有一个简化的Dataframe,可以设置如下:
indexes =['01/10/2017', '28/10/2018', '27/10/2019', '30/10/2019']
cols = ['Period', 'A', 'B', 'C']
df= pd.DataFrame(index = indexes, columns= cols)
df.Period = 1
df = pd.concat([df, 2*df.copy(), 3*df.copy()])
df.sort_index()
Dataframe看起来像:
Period A B C
01/10/2017 1 NaN NaN NaN
01/10/2017 2 NaN NaN NaN
01/10/2017 3 NaN NaN NaN
27/10/2019 1 NaN NaN NaN
27/10/2019 2 NaN NaN NaN
27/10/2019 3 NaN NaN NaN
28/10/2018 1 NaN NaN NaN
28/10/2018 2 NaN NaN NaN
28/10/2018 3 NaN NaN NaN
30/10/2019 1 NaN NaN NaN
30/10/2019 2 NaN NaN NaN
30/10/2019 3 NaN NaN NaN
我想找到此列表中的行:
FwdTimeChangeDates = ['28/10/2018', '27/10/2019']
Period
> 2
。
我希望+=2
符合这些条件(期间3
- > 5
和4
- > 6
等等。)。
如何根据这两个条件进行过滤?
df.loc[FwdTimeChangeDates]
给:
Period A B C
28/10/2018 1 NaN NaN NaN
28/10/2018 2 NaN NaN NaN
28/10/2018 3 NaN NaN NaN
27/10/2019 1 NaN NaN NaN
27/10/2019 2 NaN NaN NaN
27/10/2019 3 NaN NaN NaN
和
df.loc[df.Period>2]
给出
Period A B C
01/10/2017 3 NaN NaN NaN
28/10/2018 3 NaN NaN NaN
27/10/2019 3 NaN NaN NaN
30/10/2019 3 NaN NaN NaN
我希望:
Period A B C
28/10/2018 3 NaN NaN NaN
27/10/2019 3 NaN NaN NaN
但我无法加入这两个条件:
df.loc[FwdTimeChangeDates & df.Period>1]
或
df.loc[(FwdTimeChangeDates) & (df.Period>1)]
答案 0 :(得分:3)
结合这两个条件,使用isin
作为第一个条件。
df[df.index.isin(['28/10/2018', '27/10/2019']) & (df.Period > 2)]
Period A B C
28/10/2018 3 NaN NaN NaN
27/10/2019 3 NaN NaN NaN
答案 1 :(得分:1)
您可以分割两个条件
df.loc[FwdTimeChangeDates].query('Period>2')
Out[1366]:
Period A B C
28/10/2018 3 NaN NaN NaN
27/10/2019 3 NaN NaN NaN
答案 2 :(得分:0)
如果数据框具有多索引:
df.loc[(df.index.isin(['28/10/2018', '27/10/2019'],level=0)) & (df.Period > 2), 'Period]