python - 如果不存在,Pandas 通过查找最小列进行分组返回 NaN
问题描述
假设我有以下数据框:
import pandas as pd
df = pd.DataFrame({'id': [1,1,1,2,3,2], 'year': ['2020', '2014', '2002', '2020', '2016', '2014'], 'e': [True, False, True, True, False, True]})
df.info()
id year e
1 2020 True
1 2014 False
1 2002 True
2 2020 True
3 2016 False
2 2014 True
而且我想找到每个id的最小年份,其中e为True,如果e中没有任何True,则该id返回NaN。最终结果将是:
id year
1 2002
2 2014
3 NaN
解决方案
尝试groupby
前后reindex
过滤
s = df.loc[df.e].groupby('id').year.min().reindex(df.id.unique()).reset_index()
s
Out[307]:
id year
0 1 2002
1 2 2014
2 3 NaN
或转换为Categorical
df['id'] = pd.Categorical(df['id'])
df.loc[df.e].groupby('id').year.min()
Out[309]:
id
1 2002
2 2014
3 None
Name: year, dtype: object
推荐阅读
- c++ - 在 C++ 中,如何编写一个在指定位置翻转二维数组的函数?
- javascript - 如何使数据出现在折线图Chart.js的最右边
- node.js - 如何从节点 js 的本地上传文件夹中获取视频的持续时间?
- python - 试图用随机数据填充表但收到空集
- javascript - React JS - 无法在尚未安装的组件上调用 setState
- java - 在 EDT 上调用 Container#validate 是强制性的吗?
- java - 如何防止 UI 元素调整大小?
- php - 使用 PHP 更改 div 内容
- linux - 在后台使用 Celery 运行 Flask 服务器
- r - geom_col 以最低的数字作为最高的条显示排名