某列,值重複,將其他列的值整理到一行
阿新 • • 發佈:2020-12-10
我的資料框如下所示: 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 搜到的
我用了第一種方法沒問題,其他的沒試