基于日期列与其他列统计Pandas DataFrame中指定Series值的数量
嘿,我来帮你搞定这个统计需求!结合你的DataFrame结构,核心就是利用Pandas的分组(groupby)和日期处理能力,来实现基于timestamp和另一列的指定值统计。下面分步骤给你演示几种常见的场景:
第一步:先确保timestamp是日期类型
首先要把timestamp列转换成Pandas的日期时间格式,不然没法按日期分组:
import pandas as pd # 转换日期列 df['timestamp'] = pd.to_datetime(df['timestamp'])
场景1:按时间周期 + 另一列(比如second_val)统计指定值的数量
比如你想按月份和second_val分组,统计values列中39.0出现的次数:
# 按月份和second_val分组,统计39.0的数量 monthly_39_count = df.groupby( [pd.Grouper(key='timestamp', freq='M'), 'second_val'] )['values'].apply(lambda x: (x == 39.0).sum()).reset_index(name='count_of_39')
这里pd.Grouper(freq='M')表示按自然月分组,你可以换成'D'(天)、'W'(周)、'Y'(年)来调整时间粒度。
场景2:按客户ID(cus_id) + 日期分组统计指定值
如果要统计每个客户每天values中0.0出现的次数:
daily_cus_0_count = df.groupby( ['cus_id', pd.Grouper(key='timestamp', freq='D')] )['values'].apply(lambda x: (x == 0.0).sum()).reset_index(name='count_of_0')
场景3:筛选时间范围 + 指定列值,统计多值频次
比如你想统计2010年所有second_val=1的数据中,values各值的出现次数:
# 先筛选符合条件的数据 filtered_data = df[(df['timestamp'].dt.year == 2010) & (df['second_val'] == 1)] # 统计values的频次分布 value_freq = filtered_data['values'].value_counts().reset_index(name='count')
小提示
- 如果要统计多个指定值,把
x == 39.0换成x.isin([35.0, 39.0])就能统计这些值的总数量 - 如果你要统计的"指定Pandas Series"不是
values,只需要把代码里的'values'替换成对应的列名就行
内容的提问来源于stack exchange,提问作者Rio
相关产品推荐
相关产品推荐

