簡體   English   中英

Dataframe - 將行轉換為列 - 按另一列分組

[英]Dataframe - convert rows to columns - grouped by another columns

我正在尋找如下轉換數據框

原始數據集

團體 英里
一個 23
一個 20
一個 24
一個 25
12
17
16
19

我想從上述格式轉換為:

可樂 Col_B
23 12
20 17
24 16
25 19

通過pivot嘗試:

df = df.assign(t= df.groupby('Group').cumcount()).pivot(index = 't', columns ='Group', values = 'Miles').add_prefix('Col_').rename_axis(columns = None).reset_index(drop = True)

或通過pd.concat

k = pd.concat([g.reset_index(drop=True)['Miles'] for _,g in df.groupby('Group')], 1)
k.columns = ['colA', 'colB']

通過set_index / unstack的另一種選擇:

k = df.set_index(['Group', df.groupby('Group').cumcount()]).unstack(0).add_prefix('Col_').rename_axis(columns= [None,None])
k.columns = k.columns.droplevel()

另一個通過groupby / explode

k = df.groupby('Group').agg(list).T.apply(pd.Series.explode).add_prefix('Col_')
k = k.reset_index(drop=True).rename_axis(columns = None)

OUTPUT:

   Col_A  Col_B
0     23     12
1     20     17
2     24     16
3     25     19

一個pivot_table選項:

df = (
    df.pivot_table(index=df.groupby('Group').cumcount(),
                   columns='Group',
                   values='Miles')
        .add_prefix('Col_')
        .rename_axis(columns=None)
)

df

   Col_A  Col_B
0     23     12
1     20     17
2     24     16
3     25     19

解釋:

使用groupby cumcount根據每個組中的相對 position 創建一個新索引:

df.groupby('Group').cumcount()
Group  new_index
    A          0
    A          1
    A          2
    A          3
    B          0
    B          1
    B          2
    B          3

然后Group可以成為寬格式 Frame 中的新列。

df.pivot_table(index=df.groupby('Group').cumcount(),
                   columns='Group',
                   values='Miles')
Group   A   B
0      23  12
1      20  17
2      24  16
3      25  19

然后使用add_prefix + rename_axis進行一些清理:

df.pivot_table(index=df.groupby('Group').cumcount(),
               columns='Group',
               values='Miles')
    .add_prefix('Col_')
    .rename_axis(columns=None)
   Col_A  Col_B
0     23     12
1     20     17
2     24     16
3     25     19

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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