首页 > 解决方案 > 熊猫在范围内提取行

问题描述

我有两个熊猫表:

Table1
PosA    PosB    PosC
1       100     110
1       300     350
4       100     120

Table2
PosA   PosD
1      105
2      305
4      115
5      308

我想从中提取所有信息Table1,如果PosDTable2 在范围内并且PosBANDPosC并且完全匹配。PosATable1Table2

所以正确的输出是:

PosA   PosB   PosC   PosD
1      100    110    105
4      100    120    115

如何根据这个规则合并这两个表?

标签: pythonpandas

解决方案


这里 df1 是你的 Table1 和 df2 是你的表 2

import pandas as pd

首先利用reindex()'df1'中的方法使其长度等于'df2':-

df1=df1.reindex(df2.index)

然后检查您的状况:-

mask=(df2['PosD'].between(df1['PosB'],df1['PosC'])) & (df2['PosA']==df1['PosA'])

merge()现在通过使用方法 in合并它们pandas并传递maskindf1内部merge()方法:-

result=pd.merge(df1[mask],df2,on='PosA').astype(int)

现在,如果您打印**result**,那么您将获得预期的输出:-

    PosA    PosB    PosC    PosD
0   1       100     110     105
1   4       100     120     115

推荐阅读