我有这样的熊猫数据框:
d = {'dollar_amount': ['200.25', '350.00', '120.00', '400.50', '1231.25', '700.00', '350.00', '200.25', '2340.00'], 'date': ['22-01-2010','22-01-2010','23-01-2010','15-02-2010','27-02-2010','07-03-2010','14-01-2011','09-10-2011','28-07-2012']}
df = pd.DataFrame(data=d)
df['date'] = pd.to_datetime(df['date'], format='%d-%m-%Y')
pd.options.display.float_format = '{:,.4f}'.format
df['dollar_amount'] = df['dollar_amount'].astype(float)
df
date dollar_amount
0 22-01-2010 200.25
1 22-01-2010 350.00
2 23-01-2010 120.00
3 15-02-2010 400.50
4 27-02-2010 1231.25
5 07-03-2010 700.00
6 14-01-2011 350.00
7 09-10-2011 200.25
8 11-11-2011 2340.00
9 12-12-2011 144.50
10 12-09-2012 760.00
11 22-10-2012 255.00
12 28-07-2012 650.00
我想计算每年每一天的金额。
所以我这样划分年份:
date1 = df[(df['date'] >= '2010-01-01') & (df['date'] < '2011-01-01')]
date2 = df[(df['date'] >= '2011-01-01') & (df['date'] < '2012-01-01')]
date3 = df[(df['date'] >= '2012-01-01') & (df['date'] < '2013-01-01')]
所以现在我有 3 个数据框,日期为 2010 年date1
数据框,
日期从 2011 年开始date2
日期自 2012 年起date3
.
让我们看看date1
:
print type(date1)
date1
<class 'pandas.core.frame.DataFrame'>
date dollar_amount
0 2010-01-22 200.2500
1 2010-01-22 350.0000
2 2010-01-23 120.0000
3 2010-02-15 400.5000
4 2010-02-27 1,231.2500
5 2010-03-07 700.0000
接下来,我将按日期汇总金额,因此我使用以下方法按日期进行分组:
date1 = date1.groupby('date', as_index=False).sum()
date1 = date1[['date','dollar_amount']].sort_values(by=['date'],
ascending=True)
date2 = date2.groupby('date', as_index=False).sum()
date2 = date2[['date','dollar_amount']].sort_values(by=['date'],
ascending=True)
date3 = date3.groupby('date', as_index=False).sum()
date3 = date3[['date','dollar_amount']].sort_values(by=['date'],
ascending=True)
让我们看一下数据框date1
now:
date1
date dollar_amount
0 2010-01-22 550.2500
1 2010-01-23 120.0000
2 2010-02-15 400.5000
3 2010-02-27 1,231.2500
4 2010-03-07 700.0000
这只是按日期升序对它们进行排序:
date1 = date1[['date','dollar_amount']].sort_values(by=['date'],
ascending=True)
现在我已经获得了不同数据框中每年的美元金额的日期总和。然后我绘制每年的轨迹。它工作正常并完成任务。但这段代码非常多余,我正在复制相同的代码,如果我有 2000 年到 2017 年的数据,那么我将不得不复制并粘贴同一段代码 18 次。我认为这不是一种非常有效的方法。
我确信一定有更好的方法来做到这一点,但我不知道如何做。请帮助我。谢谢。