Ich habe DataFrame
mit Spalte Sales
.Pandas Split DataFrame von Spalte Wert
Wie kann ich es in 2 basierend auf Sales
Wert teilen?
Erste DataFrame
werden Daten mit 'Sales' < s
und zweiten mit 'Sales' >= s
Ich habe DataFrame
mit Spalte Sales
.Pandas Split DataFrame von Spalte Wert
Wie kann ich es in 2 basierend auf Sales
Wert teilen?
Erste DataFrame
werden Daten mit 'Sales' < s
und zweiten mit 'Sales' >= s
können Sie boolean indexing
verwenden:
df = pd.DataFrame({'Sales':[10,20,30,40,50], 'A':[3,4,7,6,1]})
print (df)
A Sales
0 3 10
1 4 20
2 7 30
3 6 40
4 1 50
s = 30
df1 = df[df['Sales'] >= s]
print (df1)
A Sales
2 7 30
3 6 40
4 1 50
df2 = df[df['Sales'] < s]
print (df2)
A Sales
0 3 10
1 4 20
Auch ist möglich, Invertzucker mask
von ~
:
mask = df['Sales'] >= s
df1 = df[mask]
df2 = df[~mask]
print (df1)
A Sales
2 7 30
3 6 40
4 1 50
print (df2)
A Sales
0 3 10
1 4 20
print (mask)
0 False
1 False
2 True
3 True
4 True
Name: Sales, dtype: bool
print (~mask)
0 True
1 True
2 False
3 False
4 False
Name: Sales, dtype: bool
Mit groupby
Sie in zwei Datenrahmen aufgeteilt könnten wie
In [1047]: df1, df2 = [x for _, x in df.groupby(df['Sales'] < 30)]
In [1048]: df1
Out[1048]:
A Sales
2 7 30
3 6 40
4 1 50
In [1049]: df2
Out[1049]:
A Sales
0 3 10
1 4 20
Gibt es eine Möglichkeit, es zu tun, ohne dass den Datenrahmen zweimal schneiden zu müssen? Denn auf diese Weise müssen wir den Index überspielen, um df1 zu erstellen, und ein weiteres Mal genau die gleiche Bedingung für df2. Aber ich kann nicht herausfinden, wie man beide Datenfelder in einer einzigen Zeile bekommt. – ysearka
Leider denke ich, dass es nur diese Lösung gibt - siehe [Kochbuch] (http://pandas.pydata.org/pandas-docs/stable/cookbook .html # spalten). – jezrael