2017-12-02 1 views
0

Ich versuche eine neue Spalte in einem Pandas-Datenframe zu erstellen, um dann je nach bedingter Formatierung einen ganzzahligen Wert zuzuweisen. Ein Beispiel wäre:Pandas DataFrame: Einer neuen Spalte eine ganze Zahl zuweisen, wenn mehrere Bedingungen erfüllt sind

if ((a> 1) & (a < 5)) Wert geben 10, if ((a> = 5) & (a < 10)) Wert geben 24, if ((a > 10) & (a < 5)) geben Wert 57

wo 'a' ist eine andere Spalte im Dataframe.

Gibt es eine Möglichkeit, es mit Pandas/Numpy zu tun, ohne eine Funktion zu erstellen? Ich habe einige verschiedene Optionen ausprobiert, aber keine funktionierte.

+0

Das Senden eines Beispiels Ihres Datenrahmens würde helfen. Kann es schwer haben, das zu verstehen. Ist 'a' eine andere Spalte im Dataframe? oder irgendeine Zufallsvariable? – Abhishek

Antwort

0

Mit pd.cut

df = pd.DataFrame({'a': [ 
    2, 3, 5,7,8,10,100]}) 
pd.cut(df.a,bins=[1,5,10,np.inf],labels=[10,24,57]) 
Out[282]: 
0 10 
1 10 
2 10 
3 24 
4 24 
5 24 
6 57 
Name: a, dtype: category 
Categories (3, int64): [10 < 24 < 57] 
+0

@Dan ist es hilft, können Sie darüber nachdenken, es zu akzeptieren? – Wen

+0

Sicher, sollte es getan haben – Dan

-1

denke ich irgendeine Art und Weise, dies zu tun, ohne eine Funktion zu schaffen ziemlich Kreisverkehr wäre, wenn es mit einer Funktion eigentlich nicht so schlecht ist. Außerdem passen Ihre Bedingungen nicht wirklich miteinander, aber ich nehme an, das ist ein Tippfehler. Wenn Ihre Bedingungen relativ einfach sind, können Sie Ihre Funktion im Fluge definieren Sie den Code zu halten kompakt:

df['new column'] = df['a'].apply(lambda x: 10 if x < 5 else 24 if x < 10 else 57) 

, die ein wenig haarig erhalten können, wenn Ihre Bedingungen mehr sind complicatied - es ist einfacher zu verwalten, wenn Sie die Funktion definieren expliziter:

def f(x): 
    if x > 1 and x < 5: return 10 
    elif x >= 5 and x < 10: return 14 
    else: return 57 

df['new column'] = df['a'].apply(f) 

wenn Ihre Funktionen vermeiden möchte wirklich, das beste, das ich von schafft eine neue Liste für die neue Spalte denken kann, wird es durch Iterieren durch Ihre Daten bevölkern, und es dann auf Ihre Datenrahmen und fügte hinzu:

newcol = [] 
for a in df['a'].values: 
    if x > 1 and x < 5: newcol.append(10) 
    elif x >= 5 and x < 10: newcol.append(24) 
    else: newcol.append(57) 
df['newcol'] = newcol 
Verwandte Themen