python - pandas groupby 并创建新列
问题描述
我的数据框看起来像这样:
user_id article_id set_tags
1 31 true
1 32 false
1 35 false
2 11 false
2 11 true
3 56 true
我想得到这样的结果:
user_id total_articles set_tags_true set_tags_false
1 3 1 2
2 2 1 1
3 1 1 0
我是新手,我该怎么做?我尝试使用 groupby.count(),但它似乎不正确。
解决方案
import pandas as pd
df = pd.DataFrame(
data = [[1,31,True],[1,32,False],[1,35,False],[2,11,False],[2,11,True],[3,56,True]],
columns=['user_id','article_id','set_tags']
)
df
user_id article_id set_tags
0 1 31 True
1 1 32 False
2 1 35 False
3 2 11 False
4 2 11 True
5 3 56 True
output_df = df.groupby('user_id').agg({'article_id':'nunique', 'set_tags':['sum', (lambda x:sum(~x))]})
output_df.columns = ['total_articles','set_tags_True','set_tags_False']
output_df
total_articles set_tags_True set_tags_False
user_id
1 3 1 2
2 1 1 1
3 1 1 0
如果您希望 user_id 2 的 total_articles 条目为 2 而不是 1,只需将 nunique 替换为 count。
推荐阅读
- python-3.x - 错误:如何修复“系统错误:
在Opencv python中返回NULL而不设置错误” - reactjs - MongoDB / Express / React - 如何定义将保存在数据库中的变量名
- react-native - 反应本机按钮图标未显示
- xamarin - 在 app.xaml.cs 中添加新元素时出现编译器错误 CS0029
- python - 刷新访问令牌并处理无限的 http 流
- visual-studio-2017 - 自定义操作首先安装而不是重新安装更高版本
- amazon-web-services - 只有在 s3 中上传了多个文件后,有没有办法触发 lambda
- ios - 为什么我的响应数据为零?
- azure - azure - 用户信息 - 获取更多信息
- typescript - 将被减数的交集分配给减数被减数的交集