在熊猫数据框中转置数据组

时间:2020-12-30 15:58:40

标签: python pandas dataframe

我有一个像这样的大数据框:

|type| qt  | vol|
|----|---- | -- |
| A  | 1   | 10 |
| A  | 2   | 12 |
| A  | 1   | 12 |
| B  | 3   | 11 |
| B  | 4   | 20 |
| B  | 4   | 20 |
| C  | 4   | 20 |
| C  | 4   | 20 |
| C  | 4   | 20 |
| C  | 4   | 20 |

我怎样才能像这样水平分组转置到数据框?

|A.            |B.            |C.            |
|--------------|--------------|--------------|
|type| qt | vol|type| qt | vol|type| qt | vol|
|----|----| ---|----|----| ---|----|----| ---|
| A  | 1  | 10 | B  | 3  | 11 | C  | 4  | 20 |
| A  | 2  | 12 | B  | 4  | 20 | C  | 4  | 20 |
| A  | 1  | 12 | B  | 4  | 20 | C  | 4  | 20 |
                              | C  | 4  | 20 |

2 个答案:

答案 0 :(得分:6)

您可以在 grouptype 数据帧,然后在字典推导中创建组的键值对,最后使用 concat 沿 axis=1 并传递可选的 {{ 1}} 参数获取最终结果:

keys

或者,您可以使用 d = {k:g.reset_index(drop=True) for k, g in df.groupby('type')} pd.concat(d.values(), keys=d.keys(), axis=1) + groupby 为每个组创建一个顺序计数器,然后创建一个具有两个级别的 cumcount 索引,其中第一级是计数器,第二级是列 { {1}} 本身,最后使用 multilevel 后跟 typestack

unstack

reshape

答案 1 :(得分:2)

这几乎是一列的支点:

(df.assign(idx=df.groupby('type').cumcount())
   .pivot(index='idx',columns='type', values=df.columns)
   .swaplevel(0,1, axis=1)
   .sort_index(axis=1)
)

输出:

type    A              B            C         
       qt type  vol   qt type  vol qt type vol
idx                                           
0       1    A   10    3    B   11  4    C  20
1       2    A   12    4    B   20  4    C  20
2       1    A   12    4    B   20  4    C  20
3     NaN  NaN  NaN  NaN  NaN  NaN  4    C  20