我正在尝试在pandas中旋转数据框。在下面的示例中,枢轴将在id列上,而value是value列。但是,我希望不是(3)通用ID列,因为每个类型通常只有1-3个ID,而不是通常的枢轴,在每个ID中每个ID都是它们自己的列(在我的实际数据集中是数千个)。
我尝试在熊猫中使用数据透视表和数据透视表功能。我也一直在与groupby玩耍而没有聚集。还有更直接的解决方案吗?我要达到的目标有一个术语吗?
Starting Sample Dataset:
type id value
A 123 11.9
A 234 10.2
A 129 19.3
B 123 11.9
B 189 12.2
B 120 17.8
C 120 17.8
C 139 17.9
D 110 8.5
Desired Output:
type id1 id2 id3
A 11.9 10.2 19.3
B 11.9 12.2 17.8
C 17.8 17.9 Nan
D 8.5 Nan Nan
答案 0 :(得分:0)
首先创建虚拟列ID,然后使用该ID进行分组
df1['aux'] = df1.groupby('type')['id'].cumcount().reset_index()[0].values
df1.pivot(index='type', columns = 'aux', values = 'value')
输出:
aux 0 1 2
type
A 11.9 10.2 19.3
B 11.9 12.2 17.8
C 17.8 17.9 NaN
D 8.5 NaN NaN
答案 1 :(得分:0)
cumcount
,pivot_table
和add_prefix
首先,我们可以使用cumcount
创建新ID,因为它们在type
组中是连续的:
然后,我们可以着眼于这个新的id
并使用add_prefix
获得所需的列名:
df['id2'] = df.groupby(['type']).cumcount()+1
piv = df.pivot_table(index='type', columns='id2', values='value')\
.add_prefix('id_')\
.reset_index()\
.rename_axis(None, axis=1)
type id_1 id_2 id_3
0 A 11.9 10.2 19.3
1 B 11.9 12.2 17.8
2 C 17.8 17.9 NaN
3 D 8.5 NaN NaN