サプライヤーのコスト変更に基づいて小売価格を更新するスクリプトを作成しています。
外部のサプライヤーデータを取り込み、内部データと照合し、変更を出力し、これらをAPIに渡してERPを更新し、変更を視覚化できるようにするスクリプトを正常に作成しました。私の最後の仕事は小売価格の変更を解決することですが、この問題にパンダを使用する最良の方法を見つけることができません。
df1(priceChange):
Cat Nr Net Cost Status
2801 0825646183913 8.50 ACTIVE
2802 0603497902941 7.96 ACTIVE
2803 0603497897452 9.35 ACTIVE
2804 4050538324761 14.45 ACTIVE
2805 4050538307429 10.20 ACTIVE
df2(priceGrid):
Cost (low) Cost (upp) Retail
0 2.00 3.30 5.99
1 3.31 5.00 8.99
2 5.01 6.15 10.99
3 6.16 7.15 12.99
4 7.16 8.15 14.99
5 8.16 9.25 16.99
6 9.26 10.75 18.99
7 10.76 11.50 20.99
8 11.51 12.75 22.99
9 12.76 13.75 24.99
10 13.76 14.75 26.99
したがって、df1 ['NetCost']をdf2 ['Cost(low)']&df2 ['Cost(upp)']と比較し、df2 ['Retail']を返すことにより、df1 ['Retail']を作成します。
たとえば、行2801'Net Cost '== 8.50であるため、16.99の' Retail 'が返されます。
df1は次のようになります。
Cat Nr Net Cost Status Retail
2801 0825646183913 8.50 ACTIVE 16.99
2802 0603497902941 7.96 ACTIVE 14.99
2803 0603497897452 9.35 ACTIVE 18.99
2804 4050538324761 14.45 ACTIVE 26.99
2805 4050538307429 10.20 ACTIVE 18.99
pandas.merge_asof
これに使用できます。
ただし、この方法の要件は、左側のフレームのキーを並べ替える必要があることです。したがって使用する必要があり.reset_index
、.sort_values
次いで、及び.set_index
、.sort_index
以下の例で:
df_merged = (pd.merge_asof(df1.reset_index().sort_values('Net Cost'),
df2[['Cost (low)', 'Retail']],
left_on='Net Cost',
right_on='Cost (low)')
.set_index('index')
.sort_index()
.drop('Cost (low)', axis=1))
print(df_merged)
Cat Nr Net Cost Status Retail
index
2801 825646183913 8.50 ACTIVE 16.99
2802 603497902941 7.96 ACTIVE 14.99
2803 603497897452 9.35 ACTIVE 18.99
2804 4050538324761 14.45 ACTIVE 26.99
2805 4050538307429 10.20 ACTIVE 18.99
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加