python - 使用 df.agg 在我的数据框上运行函数
问题描述
我有以下数据框:
tips.head()
输出:
total_bill tip smoker day time size tip_pct
0 16.99 1.01 No Sun Dinner 2 0.059447
1 10.34 1.66 No Sun Dinner 3 0.160542
2 21.01 3.50 No Sun Dinner 3 0.166587
3 23.68 3.31 No Sun Dinner 2 0.139780
4 24.59 3.61 No Sun Dinner 4 0.146808
创建以下函数以根据列“tip_pct”对 df 进行排序并输出前 3 或 6 行。
def top(df, n=3, column='tip_pct'):
return df.sort_values(by=column)[-n:]
top(tips, n=6)
输出:
total_bill tip smoker day time size tip_pct
0 16.99 1.01 No Sun Dinner 2 0.059447
1 10.34 1.66 No Sun Dinner 3 0.160542
2 21.01 3.50 No Sun Dinner 3 0.166587
3 23.68 3.31 No Sun Dinner 2 0.139780
4 24.59 3.61 No Sun Dinner 4 0.146808
接下来我想要一个与上面相同的输出,但有一个区别:groupby "smoker"。
tips.groupby('smoker').apply(top)
输出为截图:
输出为文本文件:
total_bill tip smoker day time size tip_pct
smoker
No 51 10.29 2.60 No Sun Dinner 2 0.252672
149 7.51 2.00 No Thur Lunch 2 0.266312
232 11.61 3.39 No Sat Dinner 2 0.291990
Yes 67 3.07 1.00 Yes Sat Dinner 1 0.325733
178 9.60 4.00 Yes Sun Dinner 2 0.416667
172 7.25 5.15 Yes Sun Dinner 2 0.710345
现在我想做与上面相同的操作,但使用agg
:
tips.groupby('smoker').agg(top)
接下来我收到以下错误消息,我无法理解:
ValueError: Shape of passed values is (7, 2), indices imply (6, 2)
我不明白为什么它不能与agg
. 我做错了什么?先感谢您。
解决方案
原因是因为GroupBy.agg
返回聚合值,也分别处理每一列,所以这里不能使用,因为处理组的所有列。
推荐阅读
- php - 如何更正我的 php 文件以消除“未指定 PHP 版本”错误?
- javascript - 如何检测 iPad Mini?
- openid-connect - 配置 Vault 以使用 dex oidc 身份验证
- css - SVG 文件通过 CSHTML 在 PDF 上呈现
- python - 如何在 PANDAS DATAFRAME 中使用多个条件进行过滤(运算符 & 和运算符 | 同时)
- php - 使 IF 语句在全球范围内可用
- visual-studio-code - VSCode插入额外的右括号
- macos - Mac OS 如何从已编译的应用程序创建“app”目录
- vue-test-utils - v-expansion-panel-content 显示在 vue/test-utils
- python - pytorch 图像到不同大小的张量