数据帧查询中的Python lambda函数

2024-04-28 09:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下格式的数据帧(不是完整大小):

    +------------+------+-------+-------+-------+-----+
    |    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 |     |
    | .......... | ...  |...... |       |       |     |
    +------------+------+-------+-------+-------+-----+

本质上,我试图过滤这两个指定日期之间的日期,类型等于美元和英镑。我目前可以对日期筛选器执行此操作,但不能对类型筛选器执行此操作:

^{pr2}$

我似乎不知道如何筛选所需的类型(因为它需要“or”而不是“&;”)。在

此外,我想知道如何在一行中完成所有这些。我见过其他人使用lambda做类似的事情,但不太明白这一切是如何工作的。在

有谁能帮我解决这个问题,并解释一下如何用Lambda示例实现同样的效果?在

谢谢


Tags: 数据类型date格式typeeurusdt1
1条回答
网友
1楼 · 发布于 2024-04-28 09:06:47

我想您需要添加带有^{}的条件:

df1 = df[(df.Date <= EndDate) & (df.Date >= StartDate) & (df.Type.isin(['USD','GBP']))]

另一个带有^{}的解决方案:

^{pr2}$

样品:

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

相关问题 更多 >