如何根据python中的公共ID值将2列的垂直pandas表转换为水平表

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

回答

我们可以枚举组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中的公共ID值将2列的垂直pandas表转换为水平表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>