折叠pandas数据帧数据集中的行

时间:2017-12-14 18:52:18

标签: python pandas

我是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文档的合并,重塑等部分之后,我不确定所需的输出是否可行。

提前感谢任何建议和/或帮助,非常感谢。

1 个答案:

答案 0 :(得分:1)

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