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_索引的内容。