【发布时间】:2021-03-31 01:01:09
【问题描述】:
问题
我有两个数据框;
- seller_df,显示在给定价格点有多少产品可供出售
- buyer_df,显示有多少市场需求。
我想根据边际数量值(即最接近的最大匹配)将 Seller_df['price'] 列合并到buyer_df
我的尝试
我发现了这个SO Link,它让我很接近。但是它会找到最近的数字匹配,而不是最近的较大数字匹配。
示例
# Seller
seller_df = pd.DataFrame({
'seller': ['A', 'B', 'C', 'A', 'B', 'C'],
'quantity': [40, 30, 60, 30, 80, 900],
'price': [3.33, 3.50, 3.95, 4.25, 4.99, 5.25],
'cum_avail': [40, 70, 130, 160, 240, 1140]
})
# Buyer
buyer_df = pd.DataFrame({
'time': ['t1', 't2', 't3', 't4', 't5', 't6', 't7', 't8', 't9', 't10'],
'quantity_required': [26, 563, 120, 233, 11, 198, 756, 64, 116, 224]
})
# What I've tried, based on SO link
S = seller_df.assign(key=1)
B = buyer_df.assign(key=1)
merged_SB = pd.merge(S, B, on='key', suffixes=('_S', '_B'))
M = merged_SB.groupby('cum_avail').apply(lambda x: abs(x['cum_avail']-x['quantity_required']) == abs(x['cum_avail']-x['quantity_required']).min())
merged_SB = merged_SB[M.values].drop_duplicates().drop('key', axis=1)
期望的输出
time quantity_required price
0 t1 26 3.33
1 t2 563 5.25
2 t3 120 3.95
3 t4 233 4.99
4 t5 11 3.33
5 t6 198 4.99
6 t7 756 5.25
7 t8 64 3.50
8 t9 116 3.95
9 t10 224 4.99
【问题讨论】:
标签: python pandas dataframe merge