通过比较两个数据帧来填充新行

问题描述 投票:0回答:1

我有两个数据帧:

df = pd.DataFrame({'ID': ['1','1','1','2','2','3','4','4'], \
                   'ward': ['icu', 'surgery','icu', 'neurology','neurology','obstetrics','OPD', 'surgery'], \
                   'start_date': ['2016-10-22 18:19:19', '2016-10-24 10:20:00','2016-10-24 12:41:30', '2016-11-09 19:41:30','2016-11-09 23:20:00','2016-11-08 09:45:00','2016-10-15 09:15:00','2016-10-15 12:15:01'], \
                   'end_date': ['2016-10-24 10:10:19', '2016-10-24 12:40:30','2016-10-26 11:15:00', '2016-11-09 22:11:00','2016-11-11 13:30:00','2016-11-09 07:25:00','2016-10-15 12:15:00','2016-10-17 17:25:00'] })
df1 = pd.DataFrame({'ID': ['1','2','4'], \
                   'ward': ['radiology', 'rehabilitation','radiology'], \
                   'date': ['2016-10-23 10:50:00', '2016-11-24 10:20:00','2016-10-15 18:41:30']})

我想通过比较ID来填充df1中显示的数据到df,如果date中的df1落在start_dateend_datedf之间。如果两个条件都匹配,我想在df1中为该特定ID添加另一行(从df获取的数据)。在我添加新行的地方,我还想更改上一行和下一行的日期/时间。

我想要的是以下结果:

   ID        ward           start_date             end_date
0   1         icu  2016-10-22 18:19:19  2016-10-23 10:50:00
1   1   radiology  2016-10-23 10:50:00  2016-10-23 10:50:00
2   1         icu  2016-10-23 10:50:00  2016-10-24 10:10:19
3   1     surgery  2016-10-24 10:20:00  2016-10-24 12:40:30
4   1         icu  2016-10-24 12:41:30  2016-10-26 11:15:00
5   2   neurology  2016-11-09 19:41:30  2016-11-09 22:11:00
6   2   neurology  2016-11-09 23:20:00  2016-11-11 13:30:00
7   3  obstetrics  2016-11-08 09:45:00  2016-11-09 07:25:00
8   4         OPD  2016-10-15 09:15:00  2016-10-15 12:15:00
9   4  hematology  2016-10-15 12:15:00  2016-10-15 18:41:30
10  4   radiology  2016-10-15 18:41:30  2016-10-15 18:41:30
11  4  hematology  2016-10-15 18:41:30  2016-10-17 17:25:00

在此示例中,ID 1和ID 4满足两个数据帧中的条件。刚解释ID 1的例子,最初ID 1从icu - > surgery - > icu移动,但在比较并填充新行后,最终数据显示ID 1从icu移动 - >放射学 - > icu - >手术 - >加护病房。现在ID 1有五行而不是3行,并且在每一行中,start_date和end_date也会更新。

数据集(df)很大,包含1百万行,我不知道应该使用什么方法来有效地获得正确的结果。任何帮助将不胜感激。

pandas merge python-3.5
1个回答
1
投票

通过解释qazxsw poi的指导,我有以下方法:

here
© www.soinside.com 2019 - 2024. All rights reserved.