Python renaming Pandas DataFrame Columns Python renaming Pandas DataFrame Columns pandas pandas

Python renaming Pandas DataFrame Columns


IIUC you could do this

import pandas as pddf = 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")

or

avg = df.groupby("b", sort=False)["a"].mean().reset_index()\        .rename(columns={"a":"mean"})

or

avg = df.groupby("b", sort=False, as_index=False)["a"].mean()\        .reset_index()\        .rename(columns={"a":"mean"})


I ran into this same problem and was also confused about what the issue was. When you call:

df.groupby(...)["p"]....rename(columns={1:"mean"})

the rename() is called on DataFrame["p"] which returns a Series object, not a DataFrame object. The rename() function for a Series object has no column parameter (because there's only 1 "column"). Sometimes, pandas will implicitly convert Series objects to DataFrames so its easy to miss. You could alternatively write

pd.Series.to_frame(df.groupby(...)["p"].mean().reset_index(), name='mean')


I think this should work:

avg = df.groupby(["t"], sort=False)["p"].mean().rename('mean').reset_index()