[英]Pivot a groupby object in Pandas?
我有以下數據幀:
df = pd.DataFrame([
[123, 'abc', '121'],
[124, 'abc', '121'],
[456, 'def', '121'],
[123, 'abc', '122'],
[123, 'abc', '122'],
[456, 'def', '145'],
[456, 'def', '145'],
[456, 'def', '146'],
], columns=['userid', 'name', 'dt'])
我根據日期對它進行了分組: df2 = df.groupby('dt').apply(lambda df: df.reset_index(drop=True))
現在,我想調整上面的內容,使它們采用以下格式:每個組的userid name_1, name_2, ..., name_k
,使得結束df看起來像這樣:
userid name
123 abc
124 abc
456 def
123 abc, abc
您可以將cumcount
與pivot_table
cumcount
使用,其中參數索引使用列userid
和dt
,因此看起來不需要create df2
:
df['cols'] = 'name_' + (df.groupby(['userid','dt']).cumcount() + 1).astype(str)
print (df.pivot_table(index=['userid', 'dt'],columns='cols', values='name', aggfunc=''.join))
cols name_1 name_2
userid dt
123 121 abc None
122 abc abc
124 121 abc None
456 121 def None
145 def def
146 def None
查看groupby
並apply
。 他們各自的文檔都在這里和這里 。 您可以取消unstack
( docs )創建的MultiIndex的額外級別。
df = df.set_index(['userid', 'dt'])['name']
df = df.groupby(level=[0,1]).apply(
lambda st: pd.Series(st.values, index=['name_%i'%i for i in range(st.shape[0])])
).unstack(level=-1)
print(df)
輸出
name_0 name_1
userid dt
123 121 abc None
122 abc abc
124 121 abc None
456 121 def None
145 def def
146 def None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.