我有一个像这样的数据框:
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
如何使用熊猫最有效地做到这一点
答案 0 :(得分:1)
首先使用merge
,然后使用boolean indexing
按between
进行过滤:
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