2017-02-27 101 views
1

我有以下格式(而不是全尺寸)一个数据帧:Python的lambda函数

+------------+------+-------+-------+-------+-----+ 
    | 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示例相同?

感谢

回答

1

我认为你需要添加条件与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 
+0

尼斯'查询'解决方案:) – miradulo

+0

@Mitch - 谢谢。 – jezrael

+0

很棒的回答。为了获得额外的积分,你能举一个例子说明如何用lambda函数完成这个工作吗? :) – naiminp