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

标签 python pandas dataframe pivot transpose

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/

相关文章:

python - Django:跨子模型字段聚合

python - 基于索引合并数据帧

python - 计算列表元素会产生错误的答案

python - 如何在 NumPy 中连接两个一维数组?

python - 使用 str 中的常量值在 pandas df 中添加日期列

python - Pandas 和 scikit-learn : KeyError: [. ...] 不在索引中

python - 用 NaN 替换整数会导致整个列变成 float 据类型

python - 在 Pandas 中有效地使用替换

python - Seaborn 调色板 - 防止颜色回收

Python/Pandas-在趋势转变时应用标签(识别数据集中的局部最大值和最小值)