簡體   English   中英

Python數據框:基於另一列創建列

[英]Python Dataframe: Create columns based on another column

我有一個數據框,該數據框的一列(此處為“ A”列)具有重復的值,我想轉換此數據框,以便根據列“ A”的值形成新的列。

df = pd.DataFrame({'A':range(4)*3, 'B':range(12),'C':range(12,24)})
df
    A   B   C
0   0   0  12
1   1   1  13
2   2   2  14
3   3   3  15
4   0   4  16
5   1   5  17
6   2   6  18
7   3   7  19
8   0   8  20
9   1   9  21
10  2  10  22
11  3  11  23

請注意,“ A”列的值重復3次。

現在,我想用此配置將最簡單的解決方案轉換為另一個數據框(請忽略列的命名,它僅用於描述目的,它們可以是任何東西):

        B               C
    A0  A1  A2  A3  A0  A1  A2  A3
0   0   1   2   3   12  13  14  15
1   4   5   6   7   16  17  18  19
2   8   9   10  11  20  21  22  23

您可能需要按cumcount assign組幫助鍵,然后才進行unstack

yourdf=df.assign(D=df.groupby('A').cumcount(),A='A'+df.A.astype(str)).set_index(['D','A']).unstack()
   B              C            
A A0 A1  A2  A3  A0  A1  A2  A3
D                              
0  0  1   2   3  12  13  14  15
1  4  5   6   7  16  17  18  19
2  8  9  10  11  20  21  22  23

這是一個pivot的問題,所以在使用

df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])

     B              C            
A    0  1   2   3   0   1   2   3
idx                              
0    0  1   2   3  12  13  14  15
1    4  5   6   7  16  17  18  19
2    8  9  10  11  20  21  22  23

如果標題很重要,則可以使用MultiIndex.set_levels進行修復。

u = df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])
u.columns = u.columns.set_levels(
    ['A' + u.columns.levels[1].astype(str)], level=[1])
u

     B              C            
A   A0 A1  A2  A3  A0  A1  A2  A3
idx                              
0    0  1   2   3  12  13  14  15
1    4  5   6   7  16  17  18  19
2    8  9  10  11  20  21  22  23

暫無
暫無

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

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