这就是我的df的样子。
A B C D E F
xyz abc aa 100 qq brc,pqr,lmn
xyz abc bb 150 qq lmn,brc,ppq
xyz abc cc 80 qq lmn,pqr
abc pqr cc 99 qq pqr,brc,lmn
abc pqr aa 180 qq brc,lmn,pqr
abc pqr bb 200 qq lmn,pqr,brc
这就是我想要的。我怎么能达到同样的目的?
A B aa bb cc E F
xyz abc 100 150 80 qq brc,pqr,lmn,ppq
abc pqr 180 200 99 qq brc,lmn,pqr
答案 0 :(得分:1)
将DataFrame.pivot_table
与DataFrame.join
一起用于由GroupBy.agg
创建的另一个DataFrame:
f = lambda x: ','.join(set(z for y in x for z in y.split(',')))
df1 = df.groupby(['A','B']).agg({'E':'first', 'F': f})
df = df.pivot_table(index=['A','B'],
columns='C',
values='D',
aggfunc='mean').join(df1).reset_index()
print (df)
A B aa bb cc E F
0 abc pqr 180 200 99 qq lmn,brc,pqr
1 xyz abc 100 150 80 qq lmn,ppq,brc,pqr