我的数据框如下所示: 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 搜到的
我用了第一种方法没问题,其他的没试