我试图调整我的数据,以便每天的总收入累积。例如:
`Created` `total_gross` `total_gross_accumulated`Day 1 100 100Day 2 100 200Day 3 100 300Day 4 100 400
有什么想法可以修改我的代码以获得total_gross_accumulated吗?
这里是我的数据。
我的代码:
from sklearn import linear_modeldef 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.indexy = event_data.total_grossplt.xticks(rotation=90)plt.plot(X, y)plt.show()
回答:
列表解析是最符合Python风格的做法。
简短回答:
这应该能给你想要的新列:
n = event_data.shape[0]# 从第0行开始跳过,从第1行开始累积直到结尾total_gross_accumulated =[event_data['total_gross'][:i].sum() for i in range(1,n+1)]# 在原始的pandas数据框中添加新变量event_data['total_gross_accumulated'] = total_gross_accumulated
或者更快的做法
event_data['total_gross_accumulated'] = event_data['total_gross'].cumsum()
详细回答:使用你的数据的完整代码:
结果:
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 3486500X = event_data.indexy = event_data.total_gross_accumulatedplt.xticks(rotation=90)plt.plot(X, y)plt.show()