簡體   English   中英

在Pandas中旋轉一個groupby對象?

[英]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

您可以將cumcountpivot_table cumcount使用,其中參數索引使用列useriddt ,因此看起來不需要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

查看groupbyapply 他們各自的文檔都在這里這里 您可以取消unstackdocs )創建的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM