python - 使用 pandas GroupBy 检查组中的所有元素是否相等
问题描述
是否有一种按字段分组并检查每个结果组的所有元素是否具有相同值的pythonic方法?
样本数据:
datetime rating signal
0 2018-12-27 11:33:00 IG 0
1 2018-12-27 11:33:00 HY -1
2 2018-12-27 11:49:00 IG 0
3 2018-12-27 11:49:00 HY -1
4 2018-12-27 12:00:00 IG 0
5 2018-12-27 12:00:00 HY -1
6 2018-12-27 12:49:00 IG 0
7 2018-12-27 12:49:00 HY -1
8 2018-12-27 14:56:00 IG 0
9 2018-12-27 14:56:00 HY -1
10 2018-12-27 15:12:00 IG 0
11 2018-12-27 15:12:00 HY -1
12 2018-12-20 15:14:00 IG 0
13 2018-12-20 15:14:00 HY -1
14 2018-12-20 15:50:00 IG -1
15 2018-12-20 15:50:00 HY -1
16 2018-12-27 13:26:00 IG 0
17 2018-12-27 13:26:00 HY -1
18 2018-12-27 13:44:00 IG 0
19 2018-12-27 13:44:00 HY -1
20 2018-12-27 15:06:00 IG 0
21 2018-12-27 15:06:00 HY -1
22 2018-12-20 15:48:00 IG 0
23 2018-12-20 15:48:00 HY -1
分组部分可以通过
df.groupby([datetime.dt.date,'rating'])
但是,我确信必须有一种简单的方法来利用 grouper 并使用转换语句在所有值signal
都相同的情况下返回 1。
期望的输出
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
解决方案
使用groupby
and nunique
,检查结果是否为 1:
df.groupby([df.datetime.dt.date, 'rating']).signal.nunique().eq(1)
datetime rating
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
Name: signal, dtype: bool
或者,类似地,使用apply
withset
转换:
(df.groupby([df.datetime.dt.date, 'rating']).signal
.apply(lambda x: len(set(x)) == 1))
datetime rating
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
Name: signal, dtype: bool
PS.,您不需要分配临时列,groupby
采用任意分组参数。
推荐阅读
- html - 如何在 html&css 中的下拉菜单之间放置空格
- python - 我坚持的快速技术 python 问题(python 新手)
- verilog - Verilog中的未知模块错误,但模块已经存在
- php - 按日期转换 Google Charts 中的 PHP 数组格式化数量
- android - Calendar getDisplayName for weekday 在不同的 Android 版本中给出不同的输出
- laravel - Laravel Livewire 超时
- xcode - Fluter Apple 硅致命 Shared_preferences 错误:找不到“Flutter/Flutter.h”文件
- .net - 邮政信箱正则表达式
- windows - 有没有办法让 Git 在 `git push` 中更改它的 ncat 命令?
- r - 使用闪亮更新空间多边形数据框