2017-08-25 117 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 

我需要計算的period數每member_id和時期的平均

我用

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

但它打印中位數所有時期。但我需要,例如對於111得到中位數爲1和2期,[12, 266],我該怎麼做?

+0

請顯示一些預期的輸出。不可能理解你想要的東西。 –

回答

1

難道這是你真正需要的:

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,然後按週期,以獲得不同的值,每期event_duration每個member_id 。再次

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

然後,按member_id,你會得到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 

我希望這是你想達到的結果。