我有一個DF
User A B C
u1 1 0.3 5
u1 5 4 5
u1 6 1.3 2
U2 5 6.2 11
U2 1 7 6.5
我想要的輸出:
User combine
U1 [1,0.3 ,5,5 ,4, 5,6 ,1.3, 2]
U2 [5,6.2,11,1,7,6.5]
我試過 :
DF['combine'] =DF.apply(lambda x: [x['A],x['B'],x['C']],axis=1)
User A B C combine
u1 1 0.3 5 [1,0.3,5]
u1 5 4 5 [5,4,5]
u1 6 1.3 2 [6,1.3,2]
U2 5 6.2 11 [5,6.5,11]
U2 1 7 6.5 [1,7,6.5]
我按用戶分組加入
DF.groupby(['user'])['combine'].agg(lambda x:','.join([str(x) for i in x])).to_frame()
User A B C combine
u1 1 0.3 5 [1,0.3,5] [5,4,5]....
U2 5 6.2 11 [5,6.5,11] [1,7,6.5]
結果不準確
uj5u.com熱心網友回復:
我們可以先將agg列放入list,groupbywithsum
out = df[['A','B','C']].agg(list,1).groupby(df['User'],sort=False).sum().to_frame('combine').reset_index()
Out[621]:
User combine
0 u1 [1.0, 0.3, 5.0, 5.0, 4.0, 5.0, 6.0, 1.3, 2.0]
1 U2 [5.0, 6.2, 11.0, 1.0, 7.0, 6.5]
uj5u.com熱心網友回復:
重新格式化您的資料框,然后按User列分組并轉換為串列:
out = df.set_index('User').stack().groupby(level=0, sort=False).apply(list) \
.rename('combine').reset_index()
print(out)
# Output
User combine
0 u1 [1.0, 0.3, 5.0, 5.0, 4.0, 5.0, 6.0, 1.3, 2.0]
1 U2 [5.0, 6.2, 11.0, 1.0, 7.0, 6.5]
uj5u.com熱心網友回復:
您可以使用底層的 numpy 陣列:
(df.groupby('User', sort=False)
.apply(lambda x:x.drop(columns='User').values.ravel().tolist())
.to_frame(name='combine')
.reset_index()
)
輸出:
User combine
0 u1 [1.0, 0.3, 5.0, 5.0, 4.0, 5.0, 6.0, 1.3, 2.0]
1 U2 [5.0, 6.2, 11.0, 1.0, 7.0, 6.5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408915.html
標籤:
