Python Pandas 日期和说明总和
Python Pandas Sum on Date and Description
我正在使用 Python 2.7。我有一个 Pandas 数据框,看起来像
raw_data = {'Date': ['12/1/2016', '12/4/2016','12/23/2016', '1/18/2017','1/18/2017','1/19/2017'],
'Account': ['aa1', 'aa2','aa1', 'aa1', 'aa1', 'aa2'],
'Description': ['store1', 'store2','store1', 'store2','store1','store2' ],
'Amount': [26.43, 24.99, 31.54,45.32, 2.00, 15.41],
'Category': ['G','G','G','G','G','G'],
'Initials': ['FR','DB','FR','DB','FR','FR']}
df = pd.DataFrame(raw_data, columns = ['Date','Account','Description','Amount','Category','Initials'])
我想按每个描述和月份进行汇总,以便我的数据如下所示:
日期 说明 金额
2016 年 12 月商店 1 57.97
2016 年 12 月商店 2 24.99
2017 年 1 月商店 1 2.00
2017 年 1 月商店 2 60.73
我已经编写了以下按月求和的代码,但我对如何合并描述列感到困惑。
#convert Date to datetimeindex
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
#sum by month
df = df.groupby(pd.TimeGrouper("M")).sum()
df
任何指导将不胜感激。谢谢
使用 strftime
将 datetime
转换为使用 Year
格式化 name of month
并将列 Description
添加到 groupby
:
df = df.groupby([df['Date'].dt.strftime('%b %Y'),'Description']).sum().reset_index()
print (df)
Date Description Amount
0 Dec 2016 store1 57.97
1 Dec 2016 store2 24.99
2 Jan 2017 store1 2.00
3 Jan 2017 store2 60.73
如果需要 Datetime
s 则仅添加另一列 Description
:
df = df.set_index('Date')
df = df.groupby([pd.TimeGrouper("M"),'Description']).sum().reset_index()
print (df)
Date Description Amount
0 2016-12-31 store1 57.97
1 2016-12-31 store2 24.99
2 2017-01-31 store1 2.00
3 2017-01-31 store2 60.73
要删除较新版本 pandas 中的警告,请使用 Grouper
:
df = df.groupby([pd.Grouper(freq="M"),'Description']).sum().reset_index()
print (df)
Date Description Amount
0 2016-12-31 store1 57.97
1 2016-12-31 store2 24.99
2 2017-01-31 store1 2.00
3 2017-01-31 store2 60.73
您可以 groupby
dt.month
和 Description
。使用 dt.strftime
并将月份编号转换为月份名称,然后 然后 执行分组:
df.groupby([df.Date.dt.strftime('%b %Y'),
'Description']).Amount.sum().reset_index()
Date Description Amount
0 Dec 2016 store1 57.97
1 Dec 2016 store2 24.99
2 Jan 2017 store1 2.00
3 Jan 2017 store2 60.73
我正在使用 Python 2.7。我有一个 Pandas 数据框,看起来像
raw_data = {'Date': ['12/1/2016', '12/4/2016','12/23/2016', '1/18/2017','1/18/2017','1/19/2017'],
'Account': ['aa1', 'aa2','aa1', 'aa1', 'aa1', 'aa2'],
'Description': ['store1', 'store2','store1', 'store2','store1','store2' ],
'Amount': [26.43, 24.99, 31.54,45.32, 2.00, 15.41],
'Category': ['G','G','G','G','G','G'],
'Initials': ['FR','DB','FR','DB','FR','FR']}
df = pd.DataFrame(raw_data, columns = ['Date','Account','Description','Amount','Category','Initials'])
我想按每个描述和月份进行汇总,以便我的数据如下所示:
日期 说明 金额
2016 年 12 月商店 1 57.97
2016 年 12 月商店 2 24.99
2017 年 1 月商店 1 2.00
2017 年 1 月商店 2 60.73
我已经编写了以下按月求和的代码,但我对如何合并描述列感到困惑。
#convert Date to datetimeindex
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
#sum by month
df = df.groupby(pd.TimeGrouper("M")).sum()
df
任何指导将不胜感激。谢谢
使用 strftime
将 datetime
转换为使用 Year
格式化 name of month
并将列 Description
添加到 groupby
:
df = df.groupby([df['Date'].dt.strftime('%b %Y'),'Description']).sum().reset_index()
print (df)
Date Description Amount
0 Dec 2016 store1 57.97
1 Dec 2016 store2 24.99
2 Jan 2017 store1 2.00
3 Jan 2017 store2 60.73
如果需要 Datetime
s 则仅添加另一列 Description
:
df = df.set_index('Date')
df = df.groupby([pd.TimeGrouper("M"),'Description']).sum().reset_index()
print (df)
Date Description Amount
0 2016-12-31 store1 57.97
1 2016-12-31 store2 24.99
2 2017-01-31 store1 2.00
3 2017-01-31 store2 60.73
要删除较新版本 pandas 中的警告,请使用 Grouper
:
df = df.groupby([pd.Grouper(freq="M"),'Description']).sum().reset_index()
print (df)
Date Description Amount
0 2016-12-31 store1 57.97
1 2016-12-31 store2 24.99
2 2017-01-31 store1 2.00
3 2017-01-31 store2 60.73
您可以 groupby
dt.month
和 Description
。使用 dt.strftime
并将月份编号转换为月份名称,然后 然后 执行分组:
df.groupby([df.Date.dt.strftime('%b %Y'),
'Description']).Amount.sum().reset_index()
Date Description Amount
0 Dec 2016 store1 57.97
1 Dec 2016 store2 24.99
2 Jan 2017 store1 2.00
3 Jan 2017 store2 60.73