2016-12-16 2 views
2

So habe ich eine benutzerdefinierte Funktion, die ich auf eine Zeile von Daten in einem DataFrame anwenden möchte, aber wie schließe ich die zusätzlichen Parameter, die ich braucheWie pd.apply mit meiner eigenen benutzerdefinierten Funktion zu verwenden, die 1 Eingabeargument nehmen

A weights 
0 1 0.166 
1 2 0.333 
2 3 0.5 

ich habe sah online, aber ich kann nichts zu finden scheinen, oder muss ich auf Standard: ich habe ein Beispiel unter

# Using df.apply 
df = pd.DataFrame({"A": [1,2,3]}) 
sum_A = np.sum(df.A) 

def calc_weight(row, total): 
    row["weights"] = row["A"]/total 

df.apply(calc_weight(row, sum_A), axis = 1) 
# Gives NameError: name 'row' is not defined 

df.apply(calc_weight(row, sum_A), axis = 1) 
# TypeError: calc_weight() missing 1 required positional argument: 'total' 

Die Ausgabe, die ich so etwas wie wollen gegeben eine For-Schleife zu verwenden, um so etwas zu tun?

Antwort

4

Try Argument hinzufügen, wie unten in Anwendung Funktion:

import pandas as pd                         
import numpy as np 

df = pd.DataFrame({"A": [1,2,3]})                      
sum_A = np.sum(df.A)                         

def f(a, total): 
    return float(a)/total                        

df['weight'] = df['A'].apply(f, args=(sum_A,))                  
print df  

Ausgang:

A weight 
0 1 0.166667 
1 2 0.333333 
2 3 0.500000 

~

+0

Danke, das war einfach genug! – YellowPillow

+0

Gern geschehen :) – linpingta

Verwandte Themen