【问题标题】:How to join tables of multiple events while preserving information?如何在保留信息的同时加入多个事件的表?
【发布时间】:2021-06-06 20:35:17
【问题描述】:

所以我有一个用例,其中我有几个表,其中包含时间序列中不同类型的事件,以及另一个包含基本信息的表。事件具有不同的类型,具有不同的列,例如,“婚姻”事件可以具有“丈夫姓名”和“妻子姓名”列,“工作”事件表可以具有“受雇时间”和“受雇时间”列“开火”,但也可以有“丈夫的名字”。基本信息表不是时间序列数据,并且包含“案例 ID”和“案例城市”之类的内容。

目标是 1. 将所有不同的时间序列表放在一个包含所有可能列的表中,只要列中没有数据,就可以使用 NaN。并且 2. 时间序列中的所有条目都应具有基础数据表中的所有可用数据。

例如:

df = pd.DataFrame(np.array([['Dave', 1,'call'], ['Josh', 2, 'rejection'], ['Greg', 3,'call']]), columns=['husband name', 'casenum', 'event'])
df2 = pd.DataFrame(np.array([['Dave', 'Mona', 1, 'new lamp'], ['Max', 'Lisa',1, 'big increase'],['Pete', 'Esther',3,'call'], ['Josh', 'Moana', 2, 'delivery']]), columns=['husband name','wife name','casenum', 'event'])
df3 = pd.DataFrame(np.array([[1, 'new york'],[3,'old york'], [2, 'york']]), columns=['casenum','city'])

我正在尝试连接:

concat = pd.concat([df, df2, df3])

这行不通,因为我们已经知道案例 1 的城市是“纽约”

我正在尝试加入:

innerjoin = pd.merge(df, df2, on='casenum', how='inner')
innerjoin = pd.merge(innerjoin, df3, on='casenum', how='inner')

这也不对,因为我想记录两个表中的所有事件。此外,有趣的是,虚拟数据上的内部和外部联接的结果是相同的,但是,在我的实际数据上,inner 联接将导致 更多 行两个事件表的总和,我不太明白。

基本上,我想要的结果是:

    husband name    casenum   event        wife name    city
0   Dave            1         call         NaN          new york
1   Josh            2         rejection    NaN          york
2   Greg            3         call         NaN          old york
0   Dave            1         new lamp     Mona         new york
1   Max             1         big increase Lisa         new york
2   Pete            3         call         Esther       old york
3   Josh            2         delivery     Moana        york

我尝试过内连接、外连接、连接,但似乎都不起作用。也许我只是太累了,但我需要做什么才能得到这个输出?谢谢!

【问题讨论】:

    标签: python pandas join merge


    【解决方案1】:

    我认为您可以使用外部选项合并两次:

    (df.merge(df2,on=['husband name', 'casenum', 'event'], how='outer')
       .merge(df3, on='casenum')
    )
    

    输出:

      husband name casenum         event wife name      city
    0         Dave       1          call       NaN  new york
    1         Dave       1      new lamp      Mona  new york
    2          Max       1  big increase      Lisa  new york
    3         Josh       2     rejection       NaN      york
    4         Josh       2      delivery     Moana      york
    5         Greg       3          call       NaN  old york
    6         Pete       3          call    Esther  old york
    

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 2010-11-11
      • 2018-05-20
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多