avg.rename(columns = {1:"mean"}, inplace=True)
3 Réponses :
IIUC vous pouvez faire ceci
avg = df.groupby("b", sort=False, as_index=False)["a"].mean()\ .reset_index()\ .rename(columns={"a":"mean"})
ou
avg = df.groupby("b", sort=False)["a"].mean().reset_index()\ .rename(columns={"a":"mean"})
ou
import pandas as pd df = pd.DataFrame({"a":np.arange(10), "b":np.random.choice(["A","B"],10)}) avg = df.groupby("b", sort=False)["a"].mean()\ .reset_index(name="mean")
p>
Cela a fonctionné comme un charme, la méthode du milieu m'a semblé la plus propre et la plus simple à lire. Merci.
C'est aussi mon préféré. Mais je voulais noter quelques options.
Je pense que cela devrait fonctionner:
avg = df.groupby(["t"], sort=False)["p"].mean().rename('mean').reset_index()
Cela me donne TypeError: l'objet 'str' n'est pas appelable ... Je ne sais pas pourquoi car je ne comprends pas complètement le fonctionnement de renommer et reset_index.
J'ai rencontré le même problème et je ne savais pas trop quel était le problème. Lorsque vous appelez:
df.groupby(...)["p" ....rename(columns={1:"mean"})
rename ()
est appelé sur DataFrame ["p"]
qui renvoie un objet Series, pas un objet DataFrame. La fonction rename ()
pour un objet Series n'a pas de paramètre de colonne (car il n'y a qu'une seule "colonne"). Parfois, les pandas convertissent implicitement des objets Series en DataFrames, de sorte qu'il est facile de les rater. Vous pouvez également écrire
pd.Series.to_frame (df.groupby (...) ["p"]. mean (). reset_index (), name = 'mean')
Avez-vous essayé de lire le fichier directement avec pandas ... pd.read_csv (datafile, delimiter = '\ t') ou similaire?