2013-03-01 16 views
-1

给定一个包含以下数据的数据框,如何使用python和pandas来提取给定事件“Y”的最后三次出现?如何为dataframe df提取事件'y'的最后3次出现的日期范围?

  Date Customer Event 
0 1/1/2013  Tom  N 
1 1/3/2013  Tom  Y 
2 1/5/2013 Harry  Y 
3 1/7/2013  Dick  N 
4 1/9/2013  Tom  Y 
5 1/11/2013  Tom  Y 
6 1/13/2013 Harry  N 
7 1/15/2013  Dick  Y 
8 1/17/2013  Tom  Y 
9 1/19/2013  Tom  N 
10 1/21/2013 Harry  Y 
11 1/23/2013  Dick  Y 
12 1/25/2013  Tom  N 
14 1/29/2013 Harry  Y 
15 1/31/2013  Dick  N 
16 2/2/2013  Tom  Y 
17 2/4/2013  Tom  Y 
18 2/6/2013 Harry  N 
19 2/8/2013  Dick  Y 
20 2/10/2013  Tom  Y 
21 2/12/2013  Tom  N 

预期结果应该是

 Start   End 
Tom  2/2/2013 2/10/2013 
Harry 1/5/2013 1/29/2013 
Dick 1/15/2013 2/8/2013 
+0

你尝试过什么? http://mattgemmell.com/2008/12/08/what-have-you-tried/ – 2013-03-01 05:39:16

+0

什么是开始和结束?他们似乎并不是第一次也是最后一次出现。 – 2013-03-01 10:55:06

+0

对不起,应该是 - 给定一个包含以下数据的数据框,如何使用python和pandas为给定事件'Y',*每个客户*的最后3次出现提取*日期范围*? – Shawnzoom 2013-03-01 14:38:14

回答

3

如果数据框被命名为DF,你可以尝试:

df[df['Event'] == 'Y'][-3:] 
+1

你也可以使用'.tail(3)':) – 2013-03-01 16:02:20

0

阿努潘,感谢你小费。你的建议返回最后3比赛时,事件==“Y”,无论客户

df[df['Event'] == 'Y'][-3:] 
Out[133]: 
    Date   Customer Event 
17 2/4/2013  Tom  Y 
19 2/8/2013  Dick  Y 
20 2/10/2013 Tom  Y 

的,我需要的日期范围根据客户过去的3“Y”事件。我确信有一种更有效的方法,但下面的工作。

df.ix[df.Customer == 'Tom'].ix[df.ix[df.Customer == 'Tom'].Event == 'Y'][-3:] 
Out[134]: 
    Date   Customer Event 
16 2/2/2013  Tom  Y 
17 2/4/2013  Tom  Y 
20 2/10/2013  Tom  Y 


df.ix[df.Customer == 'Dick'].ix[df.ix[df.Customer == 'Dick'].Event == 'Y'][-3:] 
Out[135]: 
    Date   Customer Event 
7 1/15/2013 Dick  Y 
11 1/23/2013 Dick  Y 
19 2/8/2013  Dick  Y 

等,等

感谢

相关问题