Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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 如果值落在其他数据框的范围内,则使用pandas从其他数据框添加列_Python_Pandas_Dataframe - Fatal编程技术网

Python 如果值落在其他数据框的范围内,则使用pandas从其他数据框添加列

Python 如果值落在其他数据框的范围内,则使用pandas从其他数据框添加列,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据框: df1 col1 col2 col3 A 11 RS B 23 PN A 24 LR C 23 TN D 1 WB C 23 PR 另一个数据帧: df2 name min max points A 1 15 1 A

我有这样一个数据框:

df1
col1     col2      col3
  A       11        RS
  B       23        PN
  A       24        LR
  C       23        TN
  D       1         WB
  C       23        PR
另一个数据帧:

df2
name     min     max   points
 A        1      15       1
 A        15     30       2
 B        1      15       1
 B        15     30       2
 C        1      15       1
 C        15     30       2
 D        1      15       1
 D        15     30       2
如果df1的col2值低于df2的最大值和最小值,我想将点值从df2放到df1

我正在寻找的数据帧

df3
col1     col2      col3     points
  A       11        RS         1
  B       23        PN         2
  A       24        LR         2
  C       23        TN         2
  D       1         WB         1
  C       23        PR         2
如何使用pandas以最高效的方式进行此操作

首先使用,然后使用以下各项进行过滤:

添加列点的解决方案:


@耶斯雷尔已编辑,请检查
df = df1.merge(df2, left_on='col1', right_on='name')
df = df[df['col2'].between(df['min'], df['max'])].drop(['name','min','max'], axis=1)
print (df)
   col1  col2 col3  points
0     A    11   RS       1
3     A    24   LR       2
5     B    23   PN       2
7     C    23   TN       2
9     C    23   PR       2
10    D     1   WB       1
df = df1.reset_index().merge(df2, left_on='col1', right_on='name')
df = df.loc[df['col2'].between(df['min'], df['max']),['index','points']]
print (df)
    index  points
0       0       1
3       2       2
5       1       2
7       3       2
9       5       2
10      4       1

df1['points'] = df.set_index('index')['points']
print (df1)
  col1  col2 col3  points
0    A    11   RS       1
1    B    23   PN       2
2    A    24   LR       2
3    C    23   TN       2
4    D     1   WB       1
5    C    23   PR       2