Ich habe DataFrame
mit Spalte Sales
.
Wie kann ich es basierend auf dem Sales
Wert in 2 aufteilen ?
Erstens DataFrame
werden Daten mit 'Sales' < s
und zweitens mit'Sales' >= s
Ich habe DataFrame
mit Spalte Sales
.
Wie kann ich es basierend auf dem Sales
Wert in 2 aufteilen ?
Erstens DataFrame
werden Daten mit 'Sales' < s
und zweitens mit'Sales' >= s
Antworten:
Sie können verwenden 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
Es ist auch möglich zu invertieren mask
durch ~
:
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
mask
und dem herkömmlichen Schneiden? Meine Tests zeigen, dass die Maske etwas schneller ist, aber keinen großen Unterschied
Mit können groupby
Sie in zwei Datenrahmen wie teilen
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
Verwenden von "groupby" und Listenverständnis:
Speichern des gesamten geteilten Datenrahmens in der Listenvariablen und Zugreifen auf jeden der getrennten Datenrahmen über deren Index.
DF = pd.DataFrame({'chr':["chr3","chr3","chr7","chr6","chr1"],'pos':[10,20,30,40,50],})
ans = [pd.DataFrame(y) for x, y in DF.groupby('chr', as_index=False)]
Zugriff auf den getrennten DF wie folgt:
ans[0]
ans[1]
ans[len(ans)-1] # this is the last separated DF
Zugriff auf den Spaltenwert des getrennten DF wie folgt:
ansI_chr=ans[i].chr
ans = [y for x, y in DF.groupby('chr', as_index=False)]
da y bereits ein DataFrame ist