You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中获取商品142累计销量达18时的日期?

问题描述

我是Python新手,手里有自动售货机的销售数据,想找出商品142售完18罐需要的天数。尝试遍历数据,想在累计销量达到18时获取对应的日期,但代码报错了。

样本数据

Day         Hour of Day Item    Trans Type Item Quantity Day of the Week
0   2024-04-01  01:00:00    110 Credit (EMV Contactless)    1   0
1   2024-04-01  01:00:00    133 Credit (EMV Contactless)    1   0
2   2024-04-01  09:00:00    123 Cash    1   0
3   2024-04-01  09:00:00    125 Cash    1   0
4   2024-04-01  09:00:00    137 Cash    1   0
5   2024-04-01  13:00:00    142 Cash    1   0
6   2024-04-01  19:00:00    140 Cash    1   0
7   2024-04-01  19:00:00    142 Cash    1   0
8   2024-04-01  19:00:00    143 Cash    1   0
9   2024-04-01  20:00:00    142 Cash    1   0

报错代码

for amt in april['Item Quantity']:
    if april['Item'] == 142:
        total += april['Item Quantity']
       if total > 18:
        print(april.loc[amt, ['Day']])
        break

错误原因分析

  1. 循环逻辑混乱:遍历的是单个销量值,但判断april['Item'] == 142是对整列做比较,返回布尔数组,不是针对当前行的判断。
  2. 累计方式错误:total += april['Item Quantity']是把整列销量都累加,不是只加商品142的销量。
  3. 索引使用错误:用销量值amt当行索引,而DataFrame的索引是行号(如0、1、2...),会导致找不到对应行。
  4. 缩进语法错误:第二个if语句缩进不对,Python对缩进敏感,直接引发语法报错。

解决方案

方法1:用Pandas内置函数(推荐)

先筛选商品142的记录,按日期排序后计算累计销量,再定位首次达到18罐的日期:

import pandas as pd

# 假设数据已加载到april DataFrame中
# 筛选商品142的记录并按日期排序
item_142 = april[april['Item'] == 142].sort_values('Day')
# 计算累计销量
item_142['Cumulative Quantity'] = item_142['Item Quantity'].cumsum()
# 找到累计销量≥18的第一条记录的日期
target_day = item_142[item_142['Cumulative Quantity'] >= 18]['Day'].iloc[0]
print(f"商品142售完18罐的日期是:{target_day}")

方法2:手动循环(适合新手理解逻辑)

total = 0
target_quantity = 18

# 按行遍历DataFrame
for index, row in april.iterrows():
    if row['Item'] == 142:
        total += row['Item Quantity']
        if total >= target_quantity:
            print(f"商品142售完18罐的日期是:{row['Day']}")
            break

内容的提问来源于stack exchange,提问作者dakylesta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:43:22