【发布时间】:2020-09-13 11:30:57
【问题描述】:
假设我有一个非常基本的数据集:
name food city rating
paul cream LA 2
daniel chocolate NY 3
paul chocolate LA 4
john cream NY 5
daniel jam LA 1
daniel butter NY 3
john jam NY 9
我想计算每个人的食物偏好的描述性统计数据,这很容易:
df1 = pd.pivot_table(df, values='rating', index=['city', 'name', 'food'], aggfunc=['count', 'nunique', 'sum', 'min', 'max', 'mean', 'std', 'sem', 'median', 'mad', 'var', 'skew'], margins=True, margins_name="Total")
但我想为每个名称和城市添加小计。
我可以在不同的对象中获得姓名和城市的小计:
df2 = df.groupby('name').agg(['count', 'nunique', 'sum', 'min', 'max', 'mean', 'std', 'sem', 'median', 'mad', 'var', 'skew'])
df2.index = pd.MultiIndex.from_arrays([df2.index + '_total', len(df2.index) * ['']])
df3 = df.groupby('city').agg(['count', 'nunique', 'sum', 'min', 'max', 'mean', 'std', 'sem', 'median', 'mad', 'var', 'skew'])
df3.index = pd.MultiIndex.from_arrays([df3.index + '_total', len(df3.index) * ['']])
但很难将三个表组合在一起。 df1 的输出在每一行都有 'city' 'name' 和 'food' 列
city name food count nunique...
LA daniel jam 1 1
paul choc 1 1
cream 1 1
NY daniel butter 1 1
但 df2 和 df3 的输出只有 'name' *df2) 或 'city' (df3)
name count nunique
daniel_total 3 1
john_total 2 1
我想合并这些文件,以便将名称总数放在“名称”列中,并将城市总数放在“城市”中,如下所示:
city name food count
LA daniel jam 1
paul choc 1
cream 1
LA_total 3
NY daniel butter 1
NY_total 2
daniel_total 3
john_total 2
paul_total 2
我尝试过使用 pandas concat,但它会将描述性列组合在一起
pd.concat([df1, df2, df3].sort_index()
我想我需要告诉 python 将 df2 和 df3 数据集加入哪一列,但不确定如何
【问题讨论】: