【问题标题】:add column from another data frame if the value falls under the range from the other data frame using pandas如果值低于使用熊猫的另一个数据框的范围,则添加来自另一个数据框的列
【发布时间】:2019-02-04 14:06:41
【问题描述】:

我有一个这样的数据框:

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

【问题讨论】:

  • @jezrael 已编辑,请检查

标签: python pandas dataframe


【解决方案1】:

首先使用merge,然后使用boolean indexingbetween 过滤:

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

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2021-06-26
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多