python - Pandas 根据第一个数据帧中的重叠日期选择第二个数据帧中的行?

标签 python pandas data-science

我有超过 50 万人的名单。数据看起来像第一个表。我想使用第一个表中的入院日期,如果第二个表中同一个人的入院日期在第一个表中的入院日期的 30 天内,那么我想将该重叠记录存储在第三个表。我想要的示例如下。有没有比使用 iterrows 使用第一个表中的 person_ids 和日期并检查第二个表中的每一行更快的方法?

Table 1
| person_id | admission_date | value |
|      1234 |     2017-01-31 |     6 |
|      5678 |     2018-03-20 |    12 |
|      9101 |     2017-02-22 |    11 |
|      1234 |     2020-10-31 |    19 |
|      5678 |     2019-06-16 |    21 |
|      9101 |     2021-12-14 |     8 |

Table 2
| person_id | admission_date | value |
|      1234 |     2015-01-31 |    10 |
|      1234 |     2017-02-12 |   152 |
|      5678 |     2017-01-31 |    10 |
|      5678 |     2018-04-10 |    10 |
|      9101 |     2017-02-25 |    99 |
|      9101 |     2017-03-01 |    10 |
|      1234 |     2012-12-31 |    10 |
|      5678 |     2019-07-10 |    11 |
|      9101 |     2017-01-31 |    10 |


Table 3
| person_id | admission_date | value |
|      1234 |     2017-02-12 |   152 |
|      5678 |     2018-04-10 |    10 |
|      9101 |     2017-02-25 |    99 |
|      9101 |     2017-03-01 |    10 |
|      5678 |     2019-07-10 |    11 |

最佳答案

您需要使用merge_asof :

df1['admission_date'] = pd.to_datetime(df1['admission_date'])
df2['admission_date'] = pd.to_datetime(df2['admission_date'])

out = (pd
  .merge_asof(df1.sort_values(by='admission_date')
                 .rename(columns={'admission_date': 'date'})
                 .drop(columns='value'),
              df2.sort_values(by='admission_date'),
              by='person_id',
              left_on='date',
              right_on='admission_date',
              direction='forward',
              tolerance=pd.Timedelta('30D')
             )
  .drop(columns='date')
  .dropna(subset='value')
)

输出:

   person_id admission_date  value
0       1234     2017-02-12  152.0
1       9101     2017-02-25   99.0
2       5678     2018-04-10   10.0
3       5678     2019-07-10   11.0

关于python - Pandas 根据第一个数据帧中的重叠日期选择第二个数据帧中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73634847/

相关文章:

python - 计算 pandas 系列中月均值的累积偏差

java - 从机器学习模型结果表中的预测列中检索类别名称

python - 如何根据距已知引用轨迹的距离过滤位置数据?

将数据集拆分为训练数据和测试数据,保持比例

python - Django 2 python "urls"文件中的循环导入

python,将所有文件从目录树的第 3、4、5 级移动到第 2 级

python - 只获取 Pandas 数据框中其他属性不同值的第一行?

python异步套接字编程

python:traceback.print_stack():如何对输出进行着色和重新格式化

python - 将 pandas 列中的字符串列表转换为字符串