2017-01-25 7 views
3

Ich habe einen Panda-Datenrahmen mit dem folgende Format:pandas.DataFrame.interpolate Verwenden von Zeilen zu Datenrahmen hinzuzufügen

Frequency | Value 
1 10   2.8 
2 20   2.5 
3 30   2.2 
4 40   2.3 

Ich mag pandas.DataFrame.interpolate verwenden, um eine Linie mit einer Häufigkeit von 35 mit einem Wert linear interpoliert hinzuzufügen zwischen den Frequenzen 30 und 40.

In der Bedienungsanleitung zeigt das Beispiel, wie man einen Nan ersetzt, aber nicht, wie man Werte dazwischen hinzufügt (Pandas doc).

Was wäre der beste Weg, um fortzufahren?

Antwort

3

Ich glaube, Sie müssen zuerst neuen Wert hinzufügen 35 zu frequency Spalt von loc, sort_values und dann interpolate:

df.loc[-1, 'Frequency'] = 35 
df = df.sort_values('Frequency').reset_index(drop=True) 
print (df) 
    Frequency Value 
0  10.0 2.8 
1  20.0 2.5 
2  30.0 2.2 
3  35.0 NaN 
4  40.0 2.3 

df = df.interpolate() 
print (df) 
    Frequency Value 
0  10.0 2.80 
1  20.0 2.50 
2  30.0 2.20 
3  35.0 2.25 
4  40.0 2.30 

Lösung mit Series, danke für Idee Rutger Kassies.

DataFrame.squeeze erstellen Series mit einer Spalte DataFrame.

s = df.set_index('Frequency').squeeze() 
s.loc[35] = np.nan 
s = s.sort_index().interpolate(method='index') 
print (s) 
Frequency 
10 2.80 
20 2.50 
30 2.20 
35 2.25 
40 2.30 
Name: Value, dtype: float64 
+0

Wenn die Frequenzen unregelmäßig sind, wird die tatsächliche Frequenz berücksichtigt, wenn Sie sie als Index einstellen und 'df.interpolate (method = 'index') 'verwenden. –

+0

@RutgerKassies - ja, ich füge es zur Lösung hinzu. – jezrael

Verwandte Themen