是否可以合并两个具有相似之处的表

时间:2018-09-17 07:45:49

标签: python pandas

我是python新用户,正在尝试合并具有相似信息的一列数据框。

Data 1           Data2
DocID GroupID    DocID ClassID
122     A12      121     A
122     A24      121     B
123     C12      122     C
124     C23      123     C
125     A12      123     D

我希望结果会像这样

Results
          DocID  121  122  123  124  125
GroupID ClassID
  Null     A      1    0    0    0    0
  Null     B      1    0    0    0    0
  A12      C      0    1    0    0    0
  A24      C      0    1    0    0    0
  C12      C      0    0    1    0    0
  C12      D      0    0    1    0    0
  A12     Null    0    0    0    0    1

实际上,我正在考虑映射功能并删除Null。

2 个答案:

答案 0 :(得分:2)

使用mergeget_dummies

df2 = df.merge(df1, on='DocID', how='outer').set_index(['GroupID','ClassID'])

df2 = pd.get_dummies(df2.DocID).sort_index(level=0) 
print (df2)

输出:

                      121    122      123    124    125
GroupID  ClassID                    
    NaN     A          1      0        0      0      0
            B          1      0        0      0      0
    A12    NaN         0      0        0      0      1
            C          0      1        0      0      0 
    A24     C          0      1        0      0      0
    C12     C          0      0        1      0      0
            D          0      0        1      0      0
    C23    NaN         0      0        0      1      0

答案 1 :(得分:0)

import pandas as pd
data1 = pd.DataFrame({'DocID': [122,122,123,124,125], 'GroupID': ['A12','A24', 'C12', 'C23', 'A12']})
data2 = pd.DataFrame({'DocID': [121,121,122,123,123], 'ClassID': ['A','B', 'C', 'C', 'D']})
merged_data = pd.merge(data1, data2, on='DocID', how='outer')
merged_data.set_index(['GroupID', 'ClassID'], inplace=True)
result = pd.get_dummies(merged_data, columns=['DocID'], prefix='', prefix_sep='')
result.sort_values(sorted(result.columns), ascending=False, inplace=True)
result