2017-08-25 36 views
0

私はデータフレームパンダ:GROUPBY

df = pd.DataFrame({'member_id': [111, 111, 111, 111, 222, 222, 333, 333], 'event_duration': [12, 242, 3, 21, 4, 76, 34, 12], 'period': [1, 2, 2, 2, 3, 3, 4, 4]}) 

    event_duration member_id period 
0    12  111  1 
1    242  111  2 
2    3  111  2 
3    21  111  2 
4    4  222  3 
5    76  222  3 
6    34  333  4 
7    12  333  4 

を持っている私は

res = df.groupby(['member_id']).agg({'period': pd.Series.nunique, 'event_duration': np.median}).reset_index() 

を使用する。しかし、それはすべての期間の中央値を印刷し、すべてのmember_idと期間の中央値

periodの数をカウントする必要があります。しかし、私は例えば111のメジアンを1と2の間に得るには、[12, 266]が必要です。どうすればいいですか?

+0

期待される出力を示してください。あなたが望むものを理解することは不可能です。 –

答えて

1

これはあなたが本当に必要なものが考えられます。各MEMBER_ID期間ごとevent_durationに異なる値を得るために

df.groupby(['member_id', 'period'], as_index=False)['event_duration'].sum().groupby(['member_id'], as_index=False).agg({'period': pd.Series.nunique, 'event_duration': np.median}) 

    member_id event_duration period 
0  111    139  2 
1  222    80  1 
2  333    46  1 
1

私の知る限り理解し、あなたがMEMBER_IDによってグループに必要な、その後、期間別。あなたはMEMBER_IDによって、再び、次に

    event_duration 
member_id period     
111  1     12 
      2     266 
222  3     80 
333  4     46 

グループを、あなたはevent_durationの平均取得:

res = df.groupby(['member_id', 'period']).sum() 

この版画:この場合は

、私はどうなる

res2 = res.groupby(['member_id']).mean() 

この印刷物:

  event_duration 
member_id     
111     139 
222     80 
333     46 

これがあなたが達成したい結果であることを願っています。