Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫在射程内提取行_Python_Pandas - Fatal编程技术网

Python 熊猫在射程内提取行

Python 熊猫在射程内提取行,python,pandas,Python,Pandas,我有两张桌子: Table1 PosA PosB PosC 1 100 110 1 300 350 4 100 120 Table2 PosA PosD 1 105 2 305 4 115 5 308 如果表2中的PosD在PosB和PosC和PosA的Table1和Table2范围内,我想从Table1中提取所有信息 因此,正确的输出是: PosA PosB PosC

我有两张桌子:

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

Table2
PosA   PosD
1      105
2      305
4      115
5      308
如果表2中的
PosD
PosB
PosC
PosA
Table1
Table2
范围内,我想从
Table1
中提取所有信息

因此,正确的输出是:

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

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

这里df1是您的表1,df2是您的表2

import pandas as pd
首先使用'df1'中的
reindex()
方法,使其长度等于'df2':-

df1=df1.reindex(df2.index)
然后检查您的状况:-

mask=(df2['PosD'].between(df1['PosB'],df1['PosC'])) & (df2['PosA']==df1['PosA'])
现在,使用
pandas
中的
merge()
方法合并它们,并在
df1
中传递
mask
内部
merge()
方法:-

result=pd.merge(df1[mask],df2,on='PosA').astype(int)
现在,如果您打印
**结果**
,您将获得预期输出:-

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

这里df1是您的表1,df2是您的表2

import pandas as pd
首先使用'df1'中的
reindex()
方法,使其长度等于'df2':-

df1=df1.reindex(df2.index)
然后检查您的状况:-

mask=(df2['PosD'].between(df1['PosB'],df1['PosC'])) & (df2['PosA']==df1['PosA'])
现在,使用
pandas
中的
merge()
方法合并它们,并在
df1
中传递
mask
内部
merge()
方法:-

result=pd.merge(df1[mask],df2,on='PosA').astype(int)
现在,如果您打印
**结果**
,您将获得预期输出:-

    PosA    PosB    PosC    PosD
0   1       100     110     105
1   4       100     120     115
试试这个:

df = pd.merge(table1, table2)
df[df['PosD'].between(df['PosB'], df['PosC'])]
输出:

    PosA    PosB    PosC    PosD
0    1      100     110     105
2    4      100     120     115
试试这个:

df = pd.merge(table1, table2)
df[df['PosD'].between(df['PosB'], df['PosC'])]
输出:

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

谢谢我得到一个ValueError:只能比较相同标签的系列对象错误。可能是因为两个表的行数不相同?是的,这是因为两个数据帧中的行数不同。编辑我的示例,很抱歉,这是一个错误的选择。我根据您的问题编辑了我的答案,请看一看………顺便说一句,如果此答案对您有帮助,请随意接受此答案:)谢谢!我得到一个ValueError:只能比较相同标签的系列对象错误。可能是因为两个表的行数不相同?是的,这是因为两个数据帧中的行数不同。编辑我的示例,很抱歉,这是一个错误的选择。我根据您的问题编辑了我的答案,请看一看………顺便说一句,如果此答案有助于您,请随意接受此答案:)