Python / Pandas:用于循环移动范围并附加到新列

时间:2017-03-29 23:30:10

标签: python pandas for-loop indexing slice

我对Python和Pandas相当陌生,所以请原谅我在这里摆出的无知问题。

我有一个如下所示的数据框(QReport):

DATE            STATE       SALES
2010-12-01       AL          10
2010-12-02       AL          13
2010-12-03       AL          16
2010-12-04       AL          10
2010-12-05       AL          10
2010-12-06       AL          2
2010-12-07       AL          5 
2010-12-08       AL          5

我想创建一个为期七天的销售总额列,总计七天的销售额,并将该总额添加到一个新的'总计'柱。我一直试图通过for循环来实现这一点,将x和y变量设置为0(零)和6个索引,我尝试将每个变量递增到循环:

x = 0
y = 6
for i in QReport:
    QReport['7DTotal'] = sum(QReport['SALES'][x:y])
    x = x + 1
    y = y + 1

但是,这种方法不起作用,并且为新添加的7DTotal列中的每一行返回相同的值。

预期输出为:

DATE            STATE       SALES   7DTotal
2010-12-01       AL          10        0
2010-12-02       AL          13        0
2010-12-03       AL          16        0
2010-12-04       AL          10        0
2010-12-05       AL          10        0
2010-12-06       AL          2         0
2010-12-07       AL          5         66
2010-12-08       AL          5         61

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你应该使用滚动总和:

QReport['7DTotal'] = pd.rolling_sum(QReport.SALES, 7).fillna(0)

# Suggested by a commenter
QReport['7DTotal'] = QReport.rolling(7).sum().fillna(0)

(列的前六个元素将是未定义的,而fillna将用0填充它们。)

答案 1 :(得分:0)

一个简单的解决方案是

7_day_list = []

for index in QReport.

    avg = np.mean(QReport.loc[index:index+7, 'SALES'])

    7_day_list.append(avg)

希望有所帮助