我有一个具有以下格式的 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)]
我似乎不知道如何过滤我需要的类型(因为它需要“或”而不是“&”)。
此外,我想知道如何在一行中完成所有这些操作。我见过其他人使用 lambda 做类似的事情,但不太明白它是如何工作的。
任何人都可以帮助查询并解释如何使用 Lambda 示例实现相同的目的吗?
谢谢
最佳答案
我认为您需要添加条件 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
关于Dataframe 查询中的 Python lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42486464/