嵌套for循环统计DataFrame时段客群数全为0,求原因及修正
问题原因与修正方案
为什么循环统计结果全为0?
核心原因是类型不匹配:DataFrame中的REGIS_DAY和REGIS_HOUR字段是字符串类型,但循环里用来做比较的i+1(日期值)和j(小时值)都是整数类型。字符串与整数进行相等判断时,永远会返回False,导致每次计算number.sum()得到的都是0,最终整个data_3124数组全为0。
修正方法
方法1:将循环中的整数转为字符串
把循环里的日期、小时值转为字符串,和DataFrame的字段类型保持一致:
data_3124 = np.zeros((31,24), dtype = float) for i in range(31): for j in range(24): # 把整数转为字符串,匹配字段类型 number = (df.REGIS_DAY == str(i+1)) & (df.REGIS_HOUR == str(j)) data_3124[i,j] = number.sum()
方法2:先转换DataFrame字段为整数类型
先把REGIS_DAY和REGIS_HOUR字段转为整数,再使用原循环逻辑:
# 转换字段类型为整数 df['REGIS_DAY'] = df['REGIS_DAY'].astype(int) df['REGIS_HOUR'] = df['REGIS_HOUR'].astype(int) # 原循环代码无需修改 data_3124 = np.zeros((31,24), dtype = float) for i in range(31): for j in range(24): number = (df.REGIS_DAY == (i+1)) & (df.REGIS_HOUR == j) data_3124[i,j] = number.sum()
注意:虽然嵌套循环可以解决问题,但
groupby方法更简洁高效,尤其是当数据量较大时,推荐优先使用groupby的统计方式。
内容的提问来源于stack exchange,提问作者Meera s
相关产品推荐
相关产品推荐

