【发布时间】: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
我尝试过内连接、外连接、连接,但似乎都不起作用。也许我只是太累了,但我需要做什么才能得到这个输出?谢谢!
【问题讨论】: