-1

次のデータを含むデータフレームがある場合、Pythonとパンダを使用して特定のイベント「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
4

2 に答える 2

3

DataFrame の名前が df の場合、次を試すことができます。

    df[df['Event'] == 'Y'][-3:]
于 2013-03-01T06:24:54.853 に答える
0

あぬぱんさん、ヒントありがとうございます。あなたの提案は、顧客に関係なく Event == 'Y' である最後の 3 つのイベントを返します

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

などなど

ありがとう

于 2013-03-01T13:51:24.683 に答える