Yuc*_*uca 5 python group-by dataframe pandas 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'])
但是,我敢肯定,如果来自的所有值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
或者,类似地,使用applywith setconversion:
(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可以使用任意的分组程序参数。
尝试寻找替代方案,而不是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
| 归档时间: | 
 | 
| 查看次数: | 2009 次 | 
| 最近记录: |