我有一个看起来像这样的数据框:
amount1 amount2 period customerId
3.0 4.0 weekly 12345
23.0 26.0 monthly 12345
201.0 190.0 yearly 12345
3.1 4.2 weekly 56789
21.2 36.5 monthly 56789
231.0 191.0 yearly 56789
我想像这样压扁它:
weekly_amt1 weekly_amt2 monthly_amt1 monthly_amt2 yearly_amt1 yearly_amt2 customerId
3.0 4.0 23.0 26.0 201.0 190.0 12345
3.1 4.2 21.2 36.5 231.0 191.0 56789
最有效的方法是什么?
我知道有一个pivot
函数,但它似乎无法处理多于1列的数据透视,而且由于它昂贵,所以我不想多次透视。
答案 0 :(得分:0)
我已经找到了答案:
def pivot_mult(df, cols):
mydf = df.select('customerId').drop_duplicates()
for c in cols:
mydf = mydf.join(df.withColumn('combcol',\
F.concat(F.lit('{}_'.format(c)),df['period']))\
.groupby('customerId').pivot('combcol').\
agg(F.first(c)),'customerId')
return mydf