Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中转置数据组_Python_Pandas_Dataframe - Fatal编程技术网

Python 在数据帧中转置数据组

Python 在数据帧中转置数据组,python,pandas,dataframe,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 | 我如何通过这样的水平分组转换到数据帧

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

|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 |

您可以
group
键入
上的数据框,然后在dict理解中创建组的键值对,最后沿
axis=1使用
concat
并传递可选的
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
为每个组创建一个顺序计数器,然后创建一个具有两个级别的
多级
索引,其中第一个级别是计数器,第二个级别是列
类型
本身,最后使用
stack
,然后使用
unstack
重塑

c = df.groupby('type').cumcount()
df.set_index([c, df['type'].values]).stack().unstack([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

@Manakin
df.set_index([df['type'].values,df.groupby('type').cumcount()).unstack(0.0.1,axis=1.sort_index(level=0,axis=1)
起作用,尽管Shubnam有更好的解决方案。同意,一如既往地很好,对我冷淡一点;)感谢@ScottBoston为您提供的宝贵建议。我只是简单地使用了
df['Type']。这里的值
是为了避免以后重命名索引:)谢谢@Manakin happy holidays:)@ShubhamSharma我理解并喜欢你的推理。
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