Ich versuche, 2 Datenrahmen basierend auf den 2 Spalten zu verbinden. Das Problem ist, dass ich einen der Spaltenwerte interpolieren möchte.Verbinden Sie Pandas basierend auf Spalteninterpolation
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
Ich möchte die zwei Datenrahmen basierend auf Spalten B und C verbinden, so dass ich das folgende Ergebnis
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
Die Interpolation ist linear und verwendet die nächsten Punkte, wenn außer Reichweite .
Der erste Wert
1.017=0.8+(2.31-2)*(1.5-0.8)
Der zweite Wert ist es, da der Maximalwert MXN in DF2 hat 0,6
ähnlich Der dritte Wert ist der für EUR Maximalwert ist, die 0,12
istDas Ziel ist, dies so effizient wie möglich zu tun, da die Datenrahmen ziemlich groß sind.
Ab sofort gruppiere ich nach B und benutze die scipy interpolate Funktion.
Dies ist mein aktueller Ansatz - 'ccy_dict = {ccy: interp1d (df [ 'C'], df [ 'V'], bounds_error = False, fill_value = (df [ 'V']. Iloc [0], df ['V']. Iloc [-1])) für ccy, df in ccy_df.groupby ('B')} ' Gefolgt von - ' df1 ['V'] = df1. anwenden (Lambda x: ccy_dict [x ['B']] (x ['C']), Achse = 1) ' –