如何统计带DatetimeIndex的DataFrame列中每月非零条目数?
解决方法
问题出在count()的逻辑上:它统计的是每个分组里非缺失值的总条目数,而你的DataFrame每个日期都有数据,所以结果就是当月的总天数,而非你需要的非零条目数。
你可以用以下两种方式实现需求:
方法一:先筛选非零行再分组统计
先过滤出值不为0的行,再按月份分组统计数量:
# 假设你的列没有命名,用iloc[:,0]取第一列;如果有列名,比如叫data,换成df['data'] df[df.iloc[:, 0] != 0].groupby(df.index.month).size()
size()会返回每个分组的行数,也就是每月非零条目的数量。
方法二:利用布尔值求和(更高效)
先将每个值转换为「是否非零」的布尔值(True代表非零,False代表零),再按月份分组求和(True会被视为1,False视为0,求和结果就是非零数量):
df.iloc[:, 0].ne(0).groupby(df.index.month).sum()
如果想要索引显示月份名称(比如"1月"或"January"),可以改用index.month_name()分组:
df.iloc[:, 0].ne(0).groupby(df.index.month_name()).sum()
内容的提问来源于stack exchange,提问作者Murilo
相关产品推荐
相关产品推荐

