Python Pandas 平均值和求和冲突
Python Pandas Average and Sum conflicts
我有一个 table 看起来像这样:
平均行数和总行数的计算方式如下:
df1.loc["Average"] = df1.mean()
df1.loc["Total"] = df1.sum()
现在,我意识到这里的问题是平均值计算正确,但总和也包括平均值行,这不是我想要的。
理想情况下,我希望看到更像单个 .loc 行的内容 sum()
应用于
`columns` ['Enageable R', 'R Responses', 'R Response Rate', 'Engageable Q',
'Q Responses', 'Q Response Rate']
和mean()
应用于columns ['R Response Rate', 'Q Response Rate']
所以我很想看到这样的东西:
Brand
Engageable R
R Responses
Response Rate
Brand1
34
34
100.00%
Brand2
34
34
100.00%
Brand3
34
34
100.00%
Total
102
102
100.00%
使用副本:
df2 = df1.copy(deep=True)
df2["Average"] = df1.mean()
df2["Total"] = df1.sum()
编辑
你的post有点糊涂
df1["Total"] = df1.sum()
df1["Average"] = df1[['R Response Rate', 'Q Response Rate']].mean(axis=1)
这是我找到的,感谢@Wilian 的推荐,如果有更有效的方法,请告诉我。
所以我有一个 df1,我使用以下方法创建了一个空白的 df2:
df2 = pd.DataFrame(columns=['Enageable R', 'R Responses', 'R Response Rate', 'Engageable Q',
'Q Responses', 'Q Response Rate'])
然后我在 df2 中填充了:
df2.loc["Average"] = df1.mean()
df2.loc["Total"] = df1.sum()
然后我将 df2 附加到 df1
df1 = df1.append(df2)
创建了以下内容:
所以在其他行的计算中,sum 和 average 列不相互包含。
使用DataFrame.agg
for processing both function separately and then add new rows by DataFrame.append
:
df = df.append(df.agg(['sum','mean']).rename({'sum':'Total','mean':'Average'}))
如果只需要处理部分列:
cols = ['Enageable R', 'R Responses', 'R Response Rate', 'Engageable Q',
'Q Responses', 'Q Response Rate']
df = df.append(df[cols].agg(['sum','mean']).rename({'sum':'Total','mean':'Average'}))
我有一个 table 看起来像这样:
平均行数和总行数的计算方式如下:
df1.loc["Average"] = df1.mean()
df1.loc["Total"] = df1.sum()
现在,我意识到这里的问题是平均值计算正确,但总和也包括平均值行,这不是我想要的。
理想情况下,我希望看到更像单个 .loc 行的内容 sum()
应用于
`columns` ['Enageable R', 'R Responses', 'R Response Rate', 'Engageable Q',
'Q Responses', 'Q Response Rate']
和mean()
应用于columns ['R Response Rate', 'Q Response Rate']
所以我很想看到这样的东西:
Brand | Engageable R | R Responses | Response Rate |
---|---|---|---|
Brand1 | 34 | 34 | 100.00% |
Brand2 | 34 | 34 | 100.00% |
Brand3 | 34 | 34 | 100.00% |
Total | 102 | 102 | 100.00% |
使用副本:
df2 = df1.copy(deep=True)
df2["Average"] = df1.mean()
df2["Total"] = df1.sum()
编辑
你的post有点糊涂
df1["Total"] = df1.sum()
df1["Average"] = df1[['R Response Rate', 'Q Response Rate']].mean(axis=1)
这是我找到的,感谢@Wilian 的推荐,如果有更有效的方法,请告诉我。
所以我有一个 df1,我使用以下方法创建了一个空白的 df2:
df2 = pd.DataFrame(columns=['Enageable R', 'R Responses', 'R Response Rate', 'Engageable Q',
'Q Responses', 'Q Response Rate'])
然后我在 df2 中填充了:
df2.loc["Average"] = df1.mean()
df2.loc["Total"] = df1.sum()
然后我将 df2 附加到 df1
df1 = df1.append(df2)
创建了以下内容:
所以在其他行的计算中,sum 和 average 列不相互包含。
使用DataFrame.agg
for processing both function separately and then add new rows by DataFrame.append
:
df = df.append(df.agg(['sum','mean']).rename({'sum':'Total','mean':'Average'}))
如果只需要处理部分列:
cols = ['Enageable R', 'R Responses', 'R Response Rate', 'Engageable Q',
'Q Responses', 'Q Response Rate']
df = df.append(df[cols].agg(['sum','mean']).rename({'sum':'Total','mean':'Average'}))