繁体   English   中英

如果值使用pandas落在另一个数据框的范围内,则从另一个数据框添加列

[英]add column from another data frame if the value falls under the range from the other data frame using pandas

我有一个像这样的数据框:

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

如何使用熊猫最有效地做到这一点

首先使用merge ,然后使用betweenboolean indexing进行过滤:

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

添加列points解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM