I have DataFrame
con colonna Sales
.Pandas split DataFrame per il valore di colonna
Come posso dividerlo in 2 in base al valore Sales
?
Prima DataFrame
avranno dati con 'Sales' < s
e secondo con 'Sales' >= s
I have DataFrame
con colonna Sales
.Pandas split DataFrame per il valore di colonna
Come posso dividerlo in 2 in base al valore Sales
?
Prima DataFrame
avranno dati con 'Sales' < s
e secondo con 'Sales' >= s
È possibile utilizzare boolean indexing
:
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
è anche possibile invertire mask
da ~
:
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
utilizza groupby
si potrebbe dividere in due dataframes come
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
C'è un modo per farlo senza dover tagliare il dataframe due volte? Perché in questo modo dovremo passare all'indice index per creare df1, e un'altra volta per la stessa identica condizione per df2. Ma non riesco a capire come ottenere entrambi i dataframes in una singola riga .. – ysearka
Purtroppo penso che ci sia solo questa soluzione - vedi [ricettario] (http://pandas.pydata.org/pandas-docs/stable/cookbook .html # splitting). – jezrael