我是这门语言的新手,我只是想提高我的知识。
考虑到两个不同的dfs,我有以下问题:
df1 = pd.DataFrame({'A':[10, 12, 11, 15, 17, 20, 9, 18, 11, 22, 12, 17, 29, 44, 1]})
df2 = pd.DataFrame({'SCORE_MIN':[0,5,10,15,20,25,30,35,40], 'SCORE_MAX': [5,10,15,20,25,30,35,40,45], 'SCORE':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']})
我只是想在df1
中添加一列,根据df2
的值"SCORE_MIN"one_answers"SCORE-MAX"分配"SCORE"。要清楚的是,对于df1’10’的第一个元素,考虑到它大于或等于10并且小于15,基于df2
分配的分数等于"10";C";。
我未成功尝试np.where
:
df1['SCORE'] = np.where(df1['A'] >= df2['SCORE_MIN'] & df1['A'] < df2['SCORE_MAX'], df2['SCORE'], 'NA')
感谢您的支持!
您可以使用merge_asof
:
df1 = df1.reset_index().sort_values("A")
res = pd.merge_asof(df1, df2, left_on="A", right_on="SCORE_MIN").set_index("index").sort_index()
print(res)
输出为:
A SCORE_MIN SCORE_MAX SCORE
index
0 10 10 15 C
1 12 10 15 C
2 11 10 15 C
3 15 15 20 D
4 17 15 20 D
5 20 20 25 E
6 9 5 10 B
7 18 15 20 D
8 11 10 15 C
9 22 20 25 E
10 12 10 15 C
11 17 15 20 D
12 29 25 30 F
13 44 40 45 I
14 1 0 5 A
如果你想在这里使用np.where,你可以这样做:进口熊猫作为pd将numpy导入为np
df1 = pd.DataFrame({'A':[10, 12, 11, 15, 17, 20, 9, 18, 11, 22, 12, 17, 29, 44, 1]})
df2 = pd.DataFrame({'SCORE_MIN':[0,5,10,15,20,25,30,35,40], 'SCORE_MAX': [5,10,15,20,25,30,35,40,45], 'SCORE':['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']})
a=df1.A.values
bmax=df2.SCORE_MAX.values
bmin=df2.SCORE_MIN.values
i, j = np.where((a[:, None] >= bmin) & (a[:, None] < bmax))
pd.DataFrame(
np.column_stack([df1.values[i], df2.values[j]]),
columns=df1.columns.append(df2.columns)
)
A SCORE_MIN SCORE_MAX SCORE
0 10 10 15 C
1 12 10 15 C
2 11 10 15 C
3 15 15 20 D
4 17 15 20 D
5 20 20 25 E
6 9 5 10 B
7 18 15 20 D
8 11 10 15 C
9 22 20 25 E
10 12 10 15 C
11 17 15 20 D
12 29 25 30 F
13 44 40 45 I
14 1 0 5 A