我有一个DataFrame,格式如下(不是完整尺寸):
+------------+------+-------+-------+-------+-----+
| Date | Type | T0 | T1 | T2 | ... |
+------------+------+-------+-------+-------+-----+
| 2017-01-05 | GBP | 0.001 | 0.005 | 0.006 | |
| 2017-01-05 | USD | 0.001 | 0.005 | 0.006 | |
| 2017-01-05 | EUR | 0.001 | 0.005 | 0.006 | |
| 2017-01-05 | YAN | 0.001 | 0.005 | 0.006 | |
| 2017-01-05 | ZBR | 0.001 | 0.005 | 0.006 | |
| 2017-01-06 | GBP | 0.001 | 0.005 | 0.006 | |
| 2017-01-06 | USD | 0.001 | 0.005 | 0.006 | |
| .......... | ... |...... | | | |
+------------+------+-------+-------+-------+-----+
基本上我正在尝试对两个指定日期之间的日期进行过滤,类型等于美元和英镑。我目前可以为日期过滤器而不是类型过滤器执行此操作:
df = df[(df.Date <= EndDate) & (df.Date >= StartDate)]
我似乎无法弄清楚如何过滤我需要的类型(因为它需要“或”而不是“&amp;”)。
此外,我想知道如何在一行中完成所有这些工作。我看到其他人使用lambda做类似的事情,但不太明白这一切是如何工作的。
任何人都可以帮助查询并解释我如何使用Lambda示例实现相同的目标吗?
由于
答案 0 :(得分:2)
我认为您需要使用isin
添加条件:
df1 = df[(df.Date <= EndDate) & (df.Date >= StartDate) & (df.Type.isin(['USD','GBP']))]
query
的另一个解决方案:
df2 = df.query('@EndDate >= Date >= @StartDate and Type in ["USD", "GBP"]')
样品:
StartDate = '2017-01-04'
EndDate = '2017-01-05'
df1 = df[(df.Date <= EndDate) & (df.Date >= StartDate) & (df.Type.isin(['USD','GBP']))]
print (df1)
Date Type T0 T1 T2
0 2017-01-05 GBP 0.001 0.005 0.006
1 2017-01-05 USD 0.001 0.005 0.006
df2 = df.query('@EndDate >= Date >= @StartDate and Type in ["USD", "GBP"]')
print (df2)
Date Type T0 T1 T2
0 2017-01-05 GBP 0.001 0.005 0.006
1 2017-01-05 USD 0.001 0.005 0.006