python - 折叠 Pandas 数据框数据集中的行

标签 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 文档的合并、 reshape 等部分后,我不确定是否可以得到所需的输出。

在此先感谢您的任何建议和/或帮助,非常感谢。

最佳答案

在你得到 mergedDf 之后,我们创建一个新的 para '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/

相关文章:

python - appengine python(bigtable)中的父->子关系

python - Pandas:加入 extractall 的结果

python - 查找类别总数的百分比,从最高到最低排序,保留前 80% 的名称并将所有其他名称重命名为 'other'

python - 在 pandas 中应用日期时间格式进行排序

python - 如何使用Python在CSV的每一行末尾删除逗号?

python - 在矩阵上使用 ufunc.at

python - PEP-526 与类变量的文档字符串不兼容?

python - 从 Pandas 数据框中删除带有空列表的行

python - 取消列出数据框 pandas 中的字典列表

python - Pandas:根据层次结构删除重复值