python - 使用 Pandas 进行分组时按条件选择值
问题描述
我的示例df
如下所示:
sid score completed
101 70 NaN
102 56 Yes
101 65 No
103 88 Yes
103 50 NaN
102 42 No
105 79 NaN
....
我想要什么?
- 我想分组
sid
并max score
从score
列中获取。 - 对于该列,如果“组”列包含其他选择,或者如果它同时存在“是”或“否”不存在
completed
,我想取值Yes
groupby
Yes
No
NaN
我的决赛df
应该是这样的:
sid score_max completed
101 70 No
102 56 Yes
103 88 Yes
105 79 NaN
....
我做了什么?
df_groupby = df.groupby(['sid']).agg(
score_max = ('score','max'),
completed = ('completed', any(completed="Yes"))
)
但是,该解决方案不起作用。你能帮我解决这个问题吗?
解决方案
使用有序pd.CategoricalDtype
解决您的问题:
>>> df.astype({'completed': pd.CategoricalDtype(['No', 'Yes'], ordered=True)}) \
.groupby('sid') \
.agg(score_max=('score', 'max'), completed=('completed', 'max')) \
.reset_index()
sid score_max completed
0 101 70 No
1 102 56 Yes
2 103 88 Yes
3 105 79 NaN
关于类别的详细信息:
df1 = pd.DataFrame({'Col1': ['No', 'Yes', np.NaN]})
df1['Col1'] = df1['Col1'].astype(pd.CategoricalDtype(['No', 'Yes'],
ordered=True))
>>> df1['Col1'].min()
'No'
>>> df1['Col1'].max()
'Yes'
推荐阅读
- python - python中等效的st_make_grid方法
- python - python - 如何在Python Pandas中索引以特定字符串结尾的仅点值后舍入为零?
- html - 如何使用字体修复“灯塔”中的错误?
- php - 登录的用户未在 Laravel 中正确重定向
- django - Django 频道网络聊天没有实时更新
- mysql - 如何将赤字值自动化到下个月的目标?
- r - 如何使用部分已知的系数进行回归?即如何使用偏移函数(泰勒规则模型)
- shell - /bin/sh:提取命令行参数
- html - 使用移动 HTML 切换的高效暗模式主题
- gcc - 当 +$(make) -j4 与“Cleanfirst”一起使用时,GCC 停止编译