熊猫积累数据以进行线性回归

时间:2019-06-15 17:26:01

标签: pandas matplotlib machine-learning linear-regression

我尝试调整数据,以便每天累积total_gross。例如

`Created` `total_gross`  `total_gross_accumulated`
Day 1     100            100
Day 2     100            200
Day 3     100            300
Day 4     100            400

任何想法,我该如何更改代码以 total_gross_accumulated 可用?

Here是我的数据。

我的代码:

from sklearn import linear_model

def load_event_data():
    df = pd.read_csv('sample-data.csv', usecols=['created', 'total_gross'])
    df['created'] = pd.to_datetime(df.created)
    return df.set_index('created').resample('D').sum().fillna(0)

event_data = load_event_data()

X = event_data.index
y = event_data.total_gross

plt.xticks(rotation=90)
plt.plot(X, y)
plt.show()

1 个答案:

答案 0 :(得分:2)

列表理解是执行此操作的最有效的方法。

短答案:

这应该为您提供所需的新列:

n = event_data.shape[0]

# skip line 0 and start by accumulating from 1 until the end
total_gross_accumulated =[event_data['total_gross'][:i].sum() for i in range(1,n+1)]

# add the new variable in the initial pandas dataframe
event_data['total_gross_accumulated'] = total_gross_accumulated

或更快

event_data['total_gross_accumulated'] = event_data['total_gross'].cumsum()

长答案: 使用您的数据的完整代码:

import pandas as pd

def load_event_data():
    df = pd.read_csv('sample-data.csv', usecols=['created', 'total_gross'])
    df['created'] = pd.to_datetime(df.created)

    return df.set_index('created').resample('D').sum().fillna(0)


event_data = load_event_data()

n = event_data.shape[0]

# skip line 0 and start by accumulating from 1 until the end
total_gross_accumulated =[event_data['total_gross'][:i].sum() for i in range(1,n+1)]

# add the new variable in the initial pandas dataframe
event_data['total_gross_accumulated'] = total_gross_accumulated

结果:

event_data.head(6)

#            total_gross  total_gross_accumulated
#created
#2019-03-01      3481810                  3481810
#2019-03-02         4690                  3486500
#2019-03-03            0                  3486500
#2019-03-04            0                  3486500
#2019-03-05            0                  3486500
#2019-03-06            0                  3486500


X = event_data.index
y = event_data.total_gross_accumulated

plt.xticks(rotation=90)
plt.plot(X, y)
plt.show()

enter image description here