我有兩個資料框:
df1:
| 降低 | 上 | 秩 |
|---|---|---|
| 0 | 7 | 第一的 |
| 8 | 14 | 第二 |
| 15 | 23 | 第三 |
df2:
| 分數 |
|---|
| 5 |
| 3 |
| 8 |
| 13 |
| 20 |
我想要第三個結果資料框 df3,這樣如果 df2 中的分數介于 df1 的下限值和上限值之間,則該行會從 df1 獲得相應的排名
| 分數 | 秩 |
|---|---|
| 5 | 第一的 |
| 3 | 第一的 |
| 8 | 第二 |
| 13 | 第二 |
| 20 | 第三 |
uj5u.com熱心網友回復:
更快的選擇是pd.cut按照@psidom 的建議使用:
# create an intervalIndex, luckily your data does not have overlaps
intervals = pd.IntervalIndex.from_arrays(df1.Lower, df1.Upper, closed="both")
# map intervals to `Rank` column
mapping = pd.Series(df1.Rank.array, index=intervals)
# compute new column:
outcome = pd.cut(df2.Score, bins=intervals).map(mapping)
df2.assign(Rank = outcome)
Score Rank
0 5 first
1 3 first
2 8 second
3 13 second
4 20 third
uj5u.com熱心網友回復:
嘗試這個。
df1 = pd.DataFrame( [[0,7,'first'],[8,14,'second'],[15,23,'third']], columns = ['Lower', 'Upper', 'Rank'])
df2 = pd.DataFrame( [5,3,8,13,20], columns = ['Score'])
result = []
for index, val in df2.iterrows():
for id, rank in df1.iterrows():
if val['Score'] >= rank['Lower'] and val['Score'] <= rank['Upper']:
result.append(rank['Rank'])
break
df_result = pd.DataFrame(columns = ['Score','Rank'])
df_result['Score'] = df2['Score']
df_result['Rank'] = result
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427562.html
上一篇:我對if陳述句和數字有疑問
