python-3.x - 根据熊猫数据框中的某些条件过滤行
问题描述
我有一个数据由三列组成:- 奖励日期(R_date),奖励名称(R_Name)和员工姓名(E_Name),我想要的是让那些在特定年份获得相同奖励三次或三次以上的员工. 在熊猫中,我想编写代码。如果有人知道,请帮忙。
例如
我的数据
E_Name | R_Name | R_日期 |
---|---|---|
一个 | R10 | 2019-02-02 |
一个 | R10 | 2020-02-02 |
一个 | R5 | 2020-02-02 |
一个 | R10 | 2020-04-02 |
一个 | R10 | 2020-12-12 |
乙 | R5 | 2020-07-03 |
乙 | R5 | 2020-10-11 |
C | R10 | 2020-03-01 |
C | R5 | 2020-05-02 |
D | R5 | 2019-02-02 |
D | R2 | 2019-03-02 |
D | R5 | 2019-02-05 |
D | R5 | 2019-06-02 |
D | R5 | 2020-03-04 |
输出
E_Name | R_Name | 年 | 奖励计数 |
---|---|---|---|
一个 | R10 | 2020 | 3 |
D | R5 | 2019 | 3 |
这是我的第一篇文章..如果我在解释问题时犯了任何错误,请告诉我
解决方案
您可以使用以下代码获得所需的内容,按步骤分解:
使用以下方法在新列中获取年份dt.year
:
df['year'] = df['R_date'].dt.year
groupby
使用和的合并创建具有“Reward_Count”的列transform
:
df['Reward Count'] = df.groupby(['E_Name','year','R_Name'])['R_Name'].transform('count')
通过让人们获得 >= 3 个奖励来获得您想要的输出,并使用以下方法删除重复项drop_duplicates()
:
output = (df[df['Reward Count'] >= 3]).drop_duplicates('E_Name')
print(output)
E_Name R_Name R_date year Reward Count
1 A R10 2020-02-02 2020 3
9 D R5 2019-02-02 2019 3
推荐阅读
- sql - 对表达式中的子表达式进行分类
- jquery - CSS 在 safari 上不工作,在 Chrome 上工作正常
- swift - Filter vs For,哪个更便宜?
- c++ - 播放器未显示在 [C++/SFML] 的窗口中
- docker - Docker Swarm 中的蓝牙
- python - Django - Export CSV in ManytoMany Field
- python - 如何从网站的所有页面中抓取数据并将其写入文件?
- c++ - C ++:结构中的函数是否与结构一起复制?
- javascript - TensorFlow 语音命令识别分数
- javascript - 由于无法找到那里的路由路径,部署构建失败?