Python 使用GroupBy检查组中的所有元素是否相等
是否有一种pythonic方法可以按字段分组并检查每个结果组的所有元素是否具有相同的值 样本数据:Python 使用GroupBy检查组中的所有元素是否相等,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,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
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
中的所有值都相同,则使用transform语句返回1
期望输出
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
使用
groupby
和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
和set
转换:
(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
另外,您不需要指定临时列,
groupby
接受任意的grouper参数。尝试找到替代方法,而不使用groupby
只是为了好玩
df.datetime=df.datetime.dt.date
s=pd.crosstab(df.datetime,[df.rating,df.signal])
s.eq(s.sum(axis=1,level=0),1).any(level=0,axis=1).stack()
Out[556]:
datetime rating
2018-12-20 HY True
IG False
2018-12-27 HY True
IG True
dtype: bool
您可以检查
len(设置(您的_值))==1
?我在您的输入文件中没有看到任何'temp'
键,这应该是[True,False,True,False]
?嗯,我看到2018-12-27/IG有[0,-1]作为唯一值。你能看一下吗?@coldspeed修复了样本数据,谢谢!我有一个挑战,只有当它不是当天的最后一个条目时才将其设置为false
:)跟进:有没有一种简单的方法来恢复“奇数”的索引?我们可以假设每个人只有一个day@Yuca你的意思是每天只有一个单数(对或错)?是的,有可能没有奇数,我有一种非常丑陋的方法,就是使用grouby两次:S