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