繁体   English   中英

Pandas, groupby 列值大于 x

[英]Pandas, groupby where column value is greater than x

我有一张这样的桌子

    timestamp   avg_hr  hr_quality  avg_rr  rr_quality  activity    sleep_summary_id

    1422404668  66      229             0       0           13              78
    1422404670  64      223             0       0           20              78
    1422404672  64      216             0       0           11              78
    1422404674  66      198             0       40          9               78
    1422404676  65      184             0       30          3               78
    1422404678  64      173             0       10          17              78
    1422404680  66      199             0       20          118             78

我正在尝试按timestampsleep idrr_quality对数据进行rr_quality ,其中rr_quality > 0

我尝试了以下方法,但似乎都不起作用

 df3 = df2.groupby([df2.index.hour,'sleep_summary_id',df2['rr_quality']>0])

 df3 = df2.groupby([df2.index.hour,'sleep_summary_id','rr_quality'>0])

 df3 = df2.groupby([df2.index.hour,'sleep_summary_id',['rr_quality']>0])

他们都返回一个keyerror。

编辑:

似乎也不能一次通过多个过滤器。 我尝试了以下方法:

df2[df2['rr_quality'] >= 150, df2['hr_quality'] > 200]
df2[df2['rr_quality'] >= 150, ['hr_quality'] > 200]
df2[[df2['rr_quality'] >= 150, ['hr_quality'] > 200]]

返回: TypeError: 'Series' objects are mutable, thus they cannot be hashed

这里要做的最简单的事情是先过滤 df,然后执行 groupby:

df2[df2['rr_quality'] > 0].groupby([df2.index.hour,'sleep_summary_id'])

编辑

如果您打算将其分配回原始 df:

df2.loc[df2['rr_quality'] > 0, 'AVG_HR'] = df2[df2['rr_quality'] >= 150].groupby([df2.index.hour,'emfit_sleep_summary_id'])['avg_hr'].transform('mea‌​n')

loc调用将屏蔽 lhs,以便转换的结果正确对齐

要使用多个条件进行过滤,您需要使用数组比较运算符& , | ~ for and , ornot ,另外,由于运算符优先级,您还需要将条件括在括号中:

df2[(df2['rr_quality'] >= 150) & (df2['hr_quality'] > 200)]

我知道这很旧,但我想补充一点,有一个官方功能可以做到这一点。 将示例从熊猫转换为您的案例:

grouped_df2= df2.groupby([df2.index.hour,'sleep_summary_id','rr_quality'])
grouped_df2.filter(lambda x: x['rr_quality'] > 0.)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM