我有一个pandas数据框,它具有重复的ID,因为每一行代表一个时间量。
pd.DataFrame([[1, 2], [1, 3], [2, 6], [2,7]], columns=['id', 'colA'])
我想用一种方式来变换它,即每一行代表一个ID,并且数据的时间序列方面被捕获到新的列中。即:我想输出看起来像这样:
pd.DataFrame([[1,2,3],[2,6,7]],columns=["id","colA_0","colA_1"])
我该如何实现?
答案 0 :(得分:2)
使用GroupBy.cumcount
作为计数器,通过DataFrame.set_index
创建MultiIndex
,然后通过Series.unstack
进行整形:
df1 = (df.set_index(['id', df.groupby('id').cumcount()])['colA']
.unstack()
.add_prefix('colA_')
.reset_index())
print (df1)
id colA_0 colA_1
0 1 2 3
1 2 6 7