我是Pandas的新手,正在尝试创建非规范化的平面数据集,并希望评估是否有可能。我从父级和子级两个数据框开始,从概念上讲,它们可以连接在一个列(“ PID”)上。
这是父数据框:
parentData = [(1,’A’,100), (2,’B’,200)]
parentCols = [‘PID’, ‘PATTR1’, ‘PATTR1’]
parentDf = pd.DataFrame.from_records(parentData, columns=parentCols)
Parent Dataframe
PID PATTR1 PATTR2
0 1 A 100
1 2 B 200
这是子数据框:
childData = [(201,1,’AA’,2100), (202,2,’BB’,2200), (203,2,’CC’,2300)]
childCols = [‘CID’, ‘PID’, ‘CATTR1’, ‘CATTR1’]
childDf = pd.DataFrame.from_records(childData, columns=childCols)
Child Dataframe
CID PID PATTR1 PATTR2
0 201 1 AA 2100
1 202 2 BB 2200
2 203 2 CC 2300
这是父母与孩子的合并:
mergedDf = parentDf.merge(childDf, left_on=’PID’, right_on=’PID’, how=’outer’)
Parent merged with Child dataframe
PID PATTR1 PATTR2 CID CATTR1 CATTR2
0 1 A 100 201 AA 2100
1 2 B 200 202 BB 2200
2 2 B 200 203 CC 2300
这是所需的输出是:
| ???? | ????
PID PATTR1 PATTR2 | CID CATTR1 CATTR2 | CID CATTR1 CATTR2
0 1 A 100 | 201 AA 2100 |
1 2 B 200 | 202 BB 2200 | 203 CC 2300
搜索并阅读了Pandas API文档的合并,重塑等部分之后,我不确定是否可以实现所需的输出。
在此先感谢您的任何建议和/或帮助,我们将不胜感激。
最佳答案
得到mergedDf
之后,我们创建一个新的'G'段落并使用unstack
(PS:这是一个很长的问题)
mergedDf.assign(G=mergedDf.groupby('PID').cumcount())\
.set_index(['PID','PATTR1','PATTR2','G'])\
.unstack().swaplevel(0,1,1)\
.sort_index(1,level=0)
Out[218]:
G 0 1
CATTR1 CATTR2 CID CATTR1 CATTR2 CID
PID PATTR1 PATTR2
1 A 100 AA 2100.0 201.0 None NaN NaN
2 B 200 BB 2200.0 202.0 CC 2300.0 203.0
关于python - 折叠 Pandas 数据框数据集中的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47820265/