df1 = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
'bar': ['A', 'B', 'C', 'A', 'B', 'C']})
富
酒吧
0
一
一种
1
一
乙
2
一
C
3
二
一种
4
二
乙
5
二
C
我想将其转换为
富
值1
值2
val3
一
一种
乙
C
二
一种
乙
C
我试过的代码是:
pd.pivot_table(df1,index='foo',aggfunc=['first'])
但是上面的代码只返回第一个值
最佳答案
我们可以用 groupby cumcount
枚举组并将它们用作枢轴列然后 add_prefix
到数值和 reset_index
将“foo”值返回到列:
new_df = (
df1.pivot_table(index='foo',
columns=df1.groupby('foo').cumcount() + 1,
values='bar',
aggfunc='first')
.add_prefix('val')
.reset_index()
)
foo val1 val2 val3
0 one A B C
1 two A B C
看看如何
df1.groupby('foo').cumcount() + 1
使列: foo columns
0 one 1 # First instance of "one"
1 one 2 # Second instance of "one"
2 one 3 # Third instance of "one"
3 two 1
4 two 2
5 two 3
生成上述DataFrame的代码:demo_df = pd.DataFrame({
'foo': df1['foo'],
'columns': df1.groupby('foo').cumcount() + 1
})
关于python - 如何根据python中的公共(public)ID值将2列的垂直pandas表转换为水平表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68535933/