根據左列中的范圍從右列中獲取值的最佳解決方案是什么?最好不要使用重回圈:numpy array、pandas series、dict、list。Dataframe 和范圍中的資料本身比示例中的要大。不僅是一個值,它還可以是具有多個值的行。

有一個 Excel 檔案顯示根據各種條件的運輸關稅。在此檔案中,關稅每季度更改一次。舊資料被覆寫。因此,必須保留格式以自動加載到 Dataframe 中。有必要根據距離選擇所需的收費線路。例如對于 74 公里,如果條件 1,我應該拿起 6955,00。
uj5u.com熱心網友回復:
IIUC,將您的范圍分成另外兩列(左和右),然后從右列回傳正確的值,如果 (left <= x) & (x <= right)
df = pd.DataFrame({'range': ['51-60', '61-70'], 'value': [6505.00, 6730.00]})
df[['left', 'right']] = df['range'].str.split('-', expand=True).astype(int)
get_value = lambda x: df.loc[(df['left'] <= x) & (x <= df['right']), 'value'].squeeze()
print(df)
range value left right
0 51-60 6505.0 51 60
1 61-70 6730.0 61 70
用法:
>>> get_value(53)
6505.0
>>> get_value(70)
6730.0
修改后更新
import pandas as pd
# Suppose your file is organized like:
# Dist | Q1 | Q2 | Q3 | Q4
df = pd.read_excel('Tariff.xlsx')
quarter = pd.Timestamp.today().quarter # quarter is the column number
interval = df['Distance'].str.extractall('(?P<left>\d )[^\d] (?P<right>\d )') \
.droplevel(1).astype(int)
get_value = lambda x: df.loc[(interval['left'] <= x) & (x <= interval['right'])] \
.iloc[:, quarter].squeeze()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422945.html
標籤:
上一篇:熊貓:應用result_type="expand":錯誤的dtypes
下一篇:列操作-python
