2016-03-25 13 views
4

Kann ich eine benutzerdefinierte Funktion zum Füllen von Pandas haben?Verwenden einer benutzerdefinierten Funktion Serie in fillna

s.fillna (Lambda r: r [ "SomeColumn"] ** 2)

Ich würde gerne eine benutzerdefinierte Funktion haben, die sich in der gesamten Reihe nehmen könnte.

+0

wie über die Verwendung von transformieren? wie hier https://stackoverflow.com/questions/36191286/pandas-fill-na-with-group-value/36191432#36191432 – dmb

Antwort

4

Das value Argument kann eine Serie oder ein DataFrame sein. So könnte man den richtigen Wert vor der Zeit berechnen, und übergeben Sie das zu .fillna

fill_value = s['SomeColumn'] ** 2 
s.fillna(fill_value) 
+0

Ehrfürchtig, das ist ziemlich cool \ –

-2
import numpy as np 
import pandas as pd 
dates = np.arange("2018-01-01" , "2018-01-11", dtype="datetime64[D]") 
minValues = [-10, -5, np.nan, 4, 3, 0, -5, 2, -3, 1] 
maxValues = [3, 4, 6, 7, 3, 7, np.nan, 5, 9, 12] 
df = pd.DataFrame(data=[(mini,maxi) for mini, maxi in zip(minValues,maxValues)], 
         index=dates, columns=['Min Temp', 'Max Temp']) 
print('\n', df) 
df['Margin'] = df['Max Temp'] - df['Min Temp'] 
print('\n', df) 
#choose mean or median 
df['Min Temp'] = df['Min Temp'].fillna(df['Max Temp'] - df['Margin'].median()) 
df['Max Temp'] = df['Max Temp'].fillna(df['Min Temp'] + df['Margin'].mean()) 

print('\n', df.drop('Margin', axis=1)) 
Verwandte Themen