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')