2017-01-02 25 views
1

我有一個熊貓數據幀,它看起來像下面這樣從我需要提取每週所有的用戶ID的唯一的提取大熊貓數據幀的唯一值: -如何每週

sender_user_id created 
0 2     2016-12-19 03:34:30.013923 
1 3     2016-12-20 03:34:30.013923 
2 6     2016-12-21 03:34:30.013923 
3 22    2016-12-22 03:34:30.013923 
3 6     2016-12-22 06:34:30.013923 

我需要一個輸出字典或數據幀,其聚合每週所有的獨特user_ids這看起來是這樣的

created       user_ids 
0 2016-12-19 03:34:30.013923  2,5,24,15,6 
1 2016-12-25 03:34:30.013923  8,9,14,21,5 

我有一個想法,我們可以每週分裂dataframes並使用
NUM py.unique()函數,但有沒有一個很好的和優化的方式來做到這一點?

+0

哪裏'2016年12月25日03:34:30.013923'從何而來? – RomanPerekhrest

回答

1

考慮這個隨機生成df

rng = np.arange(100) 
df = pd.DataFrame(columns=['sender_user_id', 'created']) 
for t in pd.date_range('2016-03-31', periods=10, freq='3B'): 
    for i in np.random.permutation(rng)[:5]: 
     df = df.append(dict(sender_user_id=i, created=t), ignore_index=True) 

df.sender_user_id = df.sender_user_id.astype(int) 

resampleon

df.resample('W', on='created').sender_user_id.unique().reset_index(name='user_ids') 

enter image description here

0

試這樣的:

def aggregate_function (df, col_1, col_2): 

    new_df = pd.DataFrame([], columns=[col_1, col_2]) 
    new_df[col_1] = sorted (set (df[col_1])) 

    new_df[col_2] = new_df[col_1].map(lambda x: sorted (set (df.loc[df[col_1]==x, col_2]))) 

    return (new_df) 

>>> aggregate_function (df, 'created', 'user_ids') 
>>>  created       user_ids 
      0 2016-12-19 03:34:30.013923  2,5,24,15,6 
      1 2016-12-25 03:34:30.013923  8,9,14,21,5