3 回答

TA貢獻1851條經驗 獲得超3個贊
這是一個使用的選項last_valid_index():
idx = [ref_df.loc[ref_df['ID'] == value].last_valid_index() -
1 for value in lookup_df['ID']]
print(ref_df.loc[idx])
編輯:刪除循環
mask = ref_df['ID'].isin(lookup_df['ID'])
new_df = ref_df[mask].groupby('ID').apply(lambda x: x.iloc[-2])
print(new_df)

TA貢獻1790條經驗 獲得超9個贊
更改date effective from為date并嘗試以下操作:
for index, row in lookup_df.iterrows():
result = ref_df.loc[(ref_df['ID'] == row['ID']) & (ref_df['date'] < row['date'])].iloc[-1,:].values[-1]
print(result)
輸出:
20200201
20200501

TA貢獻1788條經驗 獲得超4個贊
您可以首先使用lookup_df以下命令獲取“最新”日期:
latest = lookup_df[lambda x: x.ID == ID]['date'].iloc[0]
有了這個“最新”日期,我們可以進行另一個查詢ref_df以獲得所需的結果:
result = ref_df[lambda x: x.ID == ID]\
[lambda x: x['date effective from'] < date]\
['date effective from']\
.iloc[-1]
要對 中的所有 ID 執行相同的操作lookup_df,請將其包裝在代碼中,如下所示:
for _, row in lookup_df.iterrows():
ID, date = row['ID', 'date']
result = ref_df[lambda x: x.ID == ID]\
[lambda x: x['date effective from'] < date]\
['date effective from']\
.iloc[-1]
您不需要迭代 中的所有行ref_df,請使用如下所示的過濾器:
df[<some condition here>]
或者例如:
df[df['idx'] > 3]
返回其中列大于 3 的所有df行idx。
添加回答
舉報