Python 2列数据帧堆叠数据

Python 2列数据帧堆叠数据,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,看起来像这样: +------+------------+ | A | B | +------+------------+ | ID | 1 | | Date | 2019-04-04 | | Name | Carl | | ID | 2 | | Date | 2019-04-05 | | Name | Jane | +------+------------+ +----+-----

我有一个熊猫数据框,看起来像这样:

+------+------------+
|  A   |     B      |
+------+------------+
| ID   | 1          |
| Date | 2019-04-04 |
| Name | Carl       |
| ID   | 2          |
| Date | 2019-04-05 |
| Name | Jane       |
+------+------------+
+----+------------+------+
| ID |    Date    | Name |
+----+------------+------+
|  1 | 2019-04-04 | Carl |
|  2 | 2019-04-05 | Jane |
+----+------------+------+
我正在尝试生成一个如下所示的输出:

+------+------------+
|  A   |     B      |
+------+------------+
| ID   | 1          |
| Date | 2019-04-04 |
| Name | Carl       |
| ID   | 2          |
| Date | 2019-04-05 |
| Name | Jane       |
+------+------------+
+----+------------+------+
| ID |    Date    | Name |
+----+------------+------+
|  1 | 2019-04-04 | Carl |
|  2 | 2019-04-05 | Jane |
+----+------------+------+
我尝试过转置、旋转和取消堆叠方法,但我真的被卡住了。

与和一起使用:

如果列的顺序很重要,请添加:

df = (df.set_index([df.groupby('A').cumcount(), 'A'])['B']
        .unstack()
        .rename_axis(None, axis=1)
        .reindex(['ID','Date','Name'], axis=1))
print (df)
  ID        Date  Name
0  1  2019-04-04  Carl
1  2  2019-04-05  Jane

使用
cumcount
创建密钥,然后
pivot

df['C']=df.groupby('A').cumcount()
df.pivot(index='C',columns='A',values='B')
Out[118]: 
A        Date ID  Name
C                     
0  2019-04-04  1  Carl
1  2019-04-05  2  Jane

我会使用字典收集元素,然后使用
DataFrame
构造函数

d = {}

for a, b in zip(df.A, df.B):
    d.setdefault(a, []).append(b)

pd.DataFrame(d)

  ID        Date  Name
0  1  2019-04-04  Carl
1  2  2019-04-05  Jane

您还可以使用
collections
库中的
defaultdict

from collections import defaultdict

d = defaultdict(list)

for a, b in zip(df.A, df.B):
    d[a].append(b)

pd.DataFrame(d)

  ID        Date  Name
0  1  2019-04-04  Carl
1  2  2019-04-05  Jane

谢谢你,这非常有效,我将阅读更多关于set_索引的内容。