1. 程式人生 > 實用技巧 >某列,值重複,將其他列的值整理到一行

某列,值重複,將其他列的值整理到一行

我的資料框如下所示: ID Class

      0           9
      1           8
      1           6
      2           6
      2           2
      3           15
      3           1
      3           8



方法一:

^{}^{}一起用於新列,按^{}重塑,按^{}重新命名列:

df = df.set_index(['ID', df.groupby('ID').cumcount()])['Class']
       .unstack()
       .add_prefix('Class')
       .reset_index()

print (df)
   ID  Class0  Class1  Class2
0   0     9.0     NaN     NaN
1   1     8.0     6.0     NaN
2   2     6.0     2.0     NaN
3   3    15.0     1.0     8.0

方法二:

另一個解決方案是按組建立list,然後由建構函式新建DataFrame

^{pr2}$

編輯:

df = df.set_index('ID')
df1=pd.get_dummies(df['Class']).reindex(columns=range(17), fill_value=0).add_prefix('Class')
df1 = df1.groupby(level=0).max().reset_index()
print (df1)
   ID  Class0  Class1  Class2  Class3  Class4  Class5  Class6  Class7  Class8  \
0   0       0       0       0       0       0       0       0       0       0   
1   1       0       0       0       0       0       0       1       0       1   
2   2       0       0       1       0       0       0       1       0       0   
3   3       0       1       0       0       0       0       0       0       1   

   Class9  Class10  Class11  Class12  Class13  Class14  Class15  Class16  
0       1        0        0        0        0        0        0        0  
1       0        0        0        0        0        0        0        0  
2       0        0        0        0        0        0        0        0  
3       0        0        0        0        0        0        1        0  

方法三:

或者你可以試試

df.groupby('ID').Class.apply(lambda x : x.tolist()).to_frame()['Class'].apply(pd.Series).add_prefix('Class_').fillna(' ')
Out[602]: 
    Class_0 Class_1 Class_2
ID                         
0       9.0                
1       8.0       6        
2       6.0       2        
3      15.0       1       8




以上是從 https://www.cnpython.com/qa/218100 搜到的

我用了第一種方法沒問題,其他的沒試