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

由网友(情绪低落)分享简介:df1 = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],'bar': ['A', 'B', 'C', 'A', 'B', 'C']})富酒吧0一个一个1一个B2一个C3两个一个4两个B5两个C我想把它转换成富val1val2val3...
df1 = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
                    'bar': ['A', 'B', 'C', 'A', 'B', 'C']})

富酒吧0一个一个1一个B2一个C3两个一个4两个B5两个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
})
阅读全文

相关推荐

最新文章