因子資料框:
| 代碼 | 最小 | 最大限度 | 因素 |
|---|---|---|---|
| 一種 | 0 | 100 | 1 |
| 一種 | 101 | 300 | 2 |
| 一種 | 301 | 800 | 3 |
| 一種 | 800 | NaN | 4 |
| 乙 | 0 | 100 | 2 |
| 乙 | 101 | 300 | 4 |
| 乙 | 301 | 800 | 6 |
| 乙 | 800 | NaN | 8 |
上表用于回傳基于兩個值(“代碼”和特定數字)的因子。提供了特定值,例如 5、302、253、8000,如果該值介于最小值和最大值之間,則回傳該因子。
例如:
- A, 355 = 3
- 乙,9000 = 8
我有一個單獨的表,其中包含需要分配因子的數千行值。
資料框:
| 物品 | 代碼 | 價值 |
|---|---|---|
| 001 | 一種 | 1 |
| 002 | 一種 | 322 |
| 003 | 乙 | 21 |
| 004 | 一種 | 342 |
| 005 | 一種 | 32 |
| 006 | 乙 | 7666 |
| 007 | 乙 | 10000 |
| 008 | 乙 | 86 |
如何使用 pandas 工具集回傳所需的因子并將相關因子附加為新列?
uj5u.com熱心網友回復:
使用 left join inDataFrame.merge替換缺失值 tonp.inf然后過濾Series.between和可能的缺失值 in Min,如果在 中沒有匹配boolean indexing:
print (df1)
Code Val
0 A 355
1 B 9000
2 C 5
print (df2)
Code Min Max Factor
0 A 0 100.0 1
1 A 101 300.0 2
2 A 301 800.0 3
3 A 800 NaN 4
4 B 0 100.0 2
5 B 101 300.0 4
6 B 301 800.0 6
7 B 800 NaN 8
df = df1.merge(df2.fillna({'Max':np.inf}), how='left', on='Code')
df3 = (df[df['Val'].between(df['Min'], df['Max']) | df['Min'].isna()]
.drop(['Min','Max'], axis=1))
print (df3)
Code Val Factor
2 A 355 3.0
7 B 9000 8.0
8 C 5 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376325.html
上一篇:允許用戶從streamlit的下拉串列中選擇NULL
下一篇:如何洗掉url中的 ?(姜戈)
