に基づいてパンダに参加。問題は、列の値の1つを補間したいということです。私は2列に基づいて2つのデータフレームに参加しようとしている列補間
df1 = pd.DataFrame(data=[['ABC', 'USD', 2.31], ['DEF', 'MXN', 4.72], ['XYZ', 'EUR', 5.83]], columns=['A', 'B', 'C'])
>>df1
A B C
0 ABC USD 2.31
1 DEF MXN 4.72
2 XYZ EUR 5.83
df2 = pd.DataFrame(data=[['USD', 1, 0.5], ['USD', 2, 0.8], ['USD', 3, 1.5], ['MXN', 2, 0.6], ['MXN', 3, 0.71], ['MXN', 4, 0.88], ['EUR', 6, 0.12], ['EUR', 7, 0.5], ['EUR', 8, 0.7]], columns=['B', 'C', 'V'])
>>df2
B C V
0 USD 1 0.50
1 USD 2 0.80
2 USD 3 1.50
3 MXN 2 0.60
4 MXN 3 0.71
5 MXN 4 0.88
6 EUR 6 0.12
7 EUR 7 0.50
8 EUR 8 0.70
I、列BおよびCに基づいて、2つのデータフレームを結合したいような私は、次の結果を得ること
A B C V
0 ABC USD 2.31 1.017
1 DEF MXN 4.72 0.880
2 XYZ EUR 5.83 0.120
補間は線形であり、場合範囲外の最も近いポイントを使用し。
最初の値
1.017=0.8+(2.31-2)*(1.5-0.8)
MXNはDF2に有する最大値が0.6
あるため、第2の値は第3の値は、同様に0.12
あるEURの最大値であり、あります目的は、データフレームが非常に大きいので、これをできるだけ効率的に行うことです。
は、今のところ、私はBによってグループ化し、scipyのダウンロード補間機能を使用しています。
これは私の現在のアプローチである - 'ccy_dict = {CCY:interp1d(DF [ 'C']、[ 'V'] DF、bounds_error = Falseを、 fill_value =([ 'V'] DF。 ccy_df.groupby( 'B')}のccy、dfの場合は の後に- のdf1 ['V'] = df1が続きます(iloc [0]、df ['V'] iloc [-1]))。ありがとう、これは素晴らしい解決策です!lambda x:ccy_dict [x ['B']](x ['C'])、axis = 1) –