如何根据python中的通用ID值将2列的垂直pandas表转换为水平表 [英] How to convert vertical pandas table of 2 columns to horizontal table based on common ID value in python

查看:20
本文介绍了如何根据python中的通用ID值将2列的垂直pandas表转换为水平表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

df1 = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
                    'bar': ['A', 'B', 'C', 'A', 'B', 'C']})

<头>
酒吧
0一个一个
1一个B
2一个C
3两个一个
4两个B
5两个C

我想把它转换成

<头>
val1val2val3
一个一个BC
两个一个BC

我试过的代码是:

pd.pivot_table(df1,index='foo',aggfunc=['first'])

但上面的代码只返回第一个值

But the above code is returning only the first value

推荐答案

我们可以用 groupby cumcount 并将其用作枢轴列,然后 add_prefix 到数值和 reset_index 返回 'foo' 值到列:

We can enumerate groups with groupby cumcount and use those as the pivot columns then add_prefix to the numerical values and reset_index to return the 'foo' values to the columns:

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的代码:

Code to generate the above DataFrame:

demo_df = pd.DataFrame({
    'foo': df1['foo'],
    'columns': df1.groupby('foo').cumcount() + 1
})

这篇关于如何根据python中的通用ID值将2列的垂直pandas表转换为水平表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆