proposta la seguente dataframe in panda:binning un dataframe in panda in Python
import numpy as np
df = pandas.DataFrame({"a": np.random.random(100), "b": np.random.random(100), "id": np.arange(100)})
dove id
è un ID per ciascun punto costituito da un valore a
e b
, come posso bin a
e b
in un determinato set di contenitori (in modo che io possa quindi prendere il valore medio/medio di a
e b
in ciascun cestino)? df
potrebbe avere valori NaN
per a
o b
(o entrambi) per qualsiasi riga specificata in df
. Grazie.
Ecco un esempio migliore utilizzando la soluzione di Joe Kington con un df più realistico. La cosa di cui sono sicuro è su come accedere agli elementi df.b per ogni gruppo df.a di seguito:
a = np.random.random(20)
df = pandas.DataFrame({"a": a, "b": a + 10})
# bins for df.a
bins = np.linspace(0, 1, 10)
# bin df according to a
groups = df.groupby(np.digitize(df.a,bins))
# Get the mean of a in each group
print groups.mean()
## But how to get the mean of b for each group of a?
# ...
eccellente ed elegante! esattamente quello che stavo cercando. non richiede affatto l'ordinamento del dataframe. – user248237dfsf
E se volessi accedere ai valori di 'b' in base ai gruppi? 'groups.mean()' ti dà i mezzi per solo 'a', credo. – user248237dfsf
@ user248237dfsf - No, fornisce la media per 'a' e' b' (o meglio, fornisce la media di 'b' decodificata dai valori in' a', che è quello che pensavo stavi chiedendo) . –