2017-05-07 45 views
0
data=pd.read_csv(path,sep='\t',names=['logtime','dt','uid']) 
df=DataFrame(data) 
uid=df['uid'] 
dt=sorted(df['dt']) 
df1=pd.Series(uid,name='uid') 
df2=pd.Series(dt,name='dt') 
df=pd.concat([df1,df2],axis=1) 
df= df.groupby('uid',as_index=False).agg(lambda x:x.tolist()) 

THSが、これは前に私は次のように月とidによってグループ化すると、新規作成IDパンダGROUPBY IDと月

id dt   
a 2012-01-01 
a 2012-01-01 
a 2012-01-02 
b 2012-01-01 
b 2012-02-01 
c 2012-02-02 
... 
ds 2013-03-01 
zbd 2013-03-28 

でグループを作り、私のデータフレームのデモ例である今 私のコードですコル回とこれは非常にSTRある

dt  id times        count   
2012-01 a 2012-01-01,2012-01-01,2012-01-02 3 
     b 2012-01-01       1 
2012-02 b 2012-02-01       1 
     c 2012-02-02       1 
     ... 
2013-03 ds 2013-03-01       1 
     zbd 2013-03-28      1 
+1

を数えますaightforward、それは1ライナーです。唯一の厄介な問題は、複数の 'dt'文字列を文字列に追加することです。あなたが試したことを私たちに教えてください。そうしないと、努力が不足しているため、削除され、閉じられ、削除されてしまうでしょう。 – smci

+1

この**は、無期限に答えられているので投票してください。ここでは、パンダのドキュメントのヒントを紹介します。http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html –

+0

また、再生可能な例を投稿してください。データ。 – smci

答えて

1
#First group by on month and id, then apply 2 functions to generate concatenated time and count in one go. 

df.groupby(by=[df.dt.str[:7], 'id']).dt.agg({'Time': lambda x: ','.join(x),'Count': 
                lambda y: len(y)}).reset_index() 
Out[766]: 
     dt id Count        Time 
0 2012-01 a  3 2012-01-01,2012-01-01,2012-01-02 
1 2012-01 b  1      2012-01-01 
2 2012-02 b  1      2012-02-01 
3 2012-02 c  1      2012-02-02 
4 2013-03 ds  1      2013-03-01 
5 2013-03 zbd  1      2013-03-28 
1
In [84]: (df.groupby([df['dt'].dt.strftime('%Y-%m'), 'id'])['dt'] 
    ...: .agg([lambda x: ','.join(x.astype(str)), 'size']) 
    ...: .rename(columns={'<lambda>':'times', 'size':'count'}) 
    ...: .reset_index() 
    ...:) 
    ...: 
Out[84]: 
     dt id        times count 
0 2012-01 a 2012-01-01,2012-01-01,2012-01-02  3 
1 2012-01 b      2012-01-01  1 
2 2012-02 b      2012-02-01  1 
3 2012-02 c      2012-02-02  1 
4 2013-03 ds      2013-03-01  1 
5 2013-03 zbd      2013-03-28  1