我想reshape 一个dataframe,它的第一列应该被用来通过一个额外的标题行来分组其他列.

Initial 100

df = pd.DataFrame(
    {
        'col1':['A','A','A','B','B','B'],
        'col2':[1,2,3,4,5,6],
        'col3':[1,2,3,4,5,6],
        'col4':[1,2,3,4,5,6],
        'colx':[1,2,3,4,5,6]
    }
)

Trial: 使用pd.pivot()我可以创建一个示例,但这不符合我的预期,它似乎在分组中颠倒了:

df.pivot(columns='col1', values=['col2','col3','col4','colx'])

     col2      col3      col4      colx     
col1    A    B    A    B    A    B    A    B
0     1.0  NaN  1.0  NaN  1.0  NaN  1.0  NaN
1     2.0  NaN  2.0  NaN  2.0  NaN  2.0  NaN
2     3.0  NaN  3.0  NaN  3.0  NaN  3.0  NaN
3     NaN  4.0  NaN  4.0  NaN  4.0  NaN  4.0
4     NaN  5.0  NaN  5.0  NaN  5.0  NaN  5.0
5     NaN  6.0  NaN  6.0  NaN  6.0  NaN  6.0

Expected output:

        A                               B
col1    col2    col3    col4    colx    col2    col3    col4    colx
0       1       1       1       1       4       4       4       4
1       2       2       2       2       5       5       5       5
2       3       3       3       3       6       6       6       6

推荐答案

GroupBy.cumcount创建COUNTER COLUMN,然后使用DataFrame.pivot,交换级别为MultiIndex in columns×DataFrame.swaplevel,对其进行排序,最后按DataFrame.rename_axis删除索引和列名:

df = (df.assign(g = df.groupby('col1').cumcount())
        .pivot(index='g', columns='col1')
        .swaplevel(0,1,axis=1)
        .sort_index(axis=1)
        .rename_axis(index=None, columns=[None, None]))

print(df)
     A                   B               
  col2 col3 col4 colx col2 col3 col4 colx
0    1    1    1    1    4    4    4    4
1    2    2    2    2    5    5    5    5
2    3    3    3    3    6    6    6    6

Python-3.x相关问答推荐

正则表达式匹配并提取括号前的单词

Python 列表求和所有出现的保留顺序

提高时间复杂度的一些建议

Python Regex 查找给定字符串是否遵循交替元音、辅音或辅音、元音的连续模式

以编程方式映射 uniprot ID 时如何解决 400 客户端错误?

在判断列表变量时如何判断特定列的值并分配加权整数值

在不使用字符串方法的情况下查找字符串最后一个单词的长度 - Python

FastAPI - 调用 API 时设置 response_model_exclude

如何将数据框中的每一行转换为具有属性的 node ?

在两个数据框之间查找相等的列

Python:遍历子列表

Jupyter Notebook - 在函数内绘图 - 未绘制图形

tkinter TclError:错误的文件类型使用 askopenfilename

如何使用 Python 订阅 Websocket API 通道?

Pyodbc:登录超时错误

将字符串拆分为最大长度 X 的片段 - 仅在空格处拆分

清除 PyCharm 运行窗口

如何在 Python 3.2 中退出?

将 Python SIGINT 重置为默认信号处理程序

无法解码 Python Web 请求