我在 Pandas 数据框中有下表:
date user_id whole_cost cost1
02/10/2012 00:00:00 1 1790 12
07/10/2012 00:00:00 1 364 15
30/01/2013 00:00:00 1 280 10
02/02/2013 00:00:00 1 259 24
05/03/2013 00:00:00 1 201 39
02/10/2012 00:00:00 3 623 1
07/12/2012 00:00:00 3 90 0
30/01/2013 00:00:00 3 312 90
02/02/2013 00:00:00 5 359 45
05/03/2013 00:00:00 5 301 34
02/02/2013 00:00:00 5 359 1
05/03/2013 00:00:00 5 801 12
..
该表是使用以下查询从 csv 文件中提取的:
import pandas as pd
newnames = ['date','user_id', 'whole_cost', 'cost1']
df = pd.read_csv('expenses.csv', names = newnames, index_col = 'date')
我必须分析我的用户的个人资料,为此目的:
我想按月对整个月的查询 whole_cost
进行汇总(对于每个用户 - 他们是数千个)查询,例如如果 user_id=1
在 02/10/2012 的总成本为 1790,成本 1 为 12,在 07/10/2012 的总成本为 364,那么它应该在新表中有一个条目2012 年 10 月 31 日的 2154(作为全部成本)(代表月份的月底结束点 - 转换表中的所有日期都将是代表它们相关的整个月份的月底)。
最佳答案
在 0.14 中,您将能够同时按月和另一列进行分组:
In [11]: df
Out[11]:
user_id whole_cost cost1
2012-10-02 1 1790 12
2012-10-07 1 364 15
2013-01-30 1 280 10
2013-02-02 1 259 24
2013-03-05 1 201 39
2012-10-02 3 623 1
2012-12-07 3 90 0
2013-01-30 3 312 90
2013-02-02 5 359 45
2013-03-05 5 301 34
2013-02-02 5 359 1
2013-03-05 5 801 12
In [12]: df1 = df.sort_index() # requires sorted DatetimeIndex
In [13]: df1.groupby([pd.TimeGrouper(freq='M'), 'user_id'])['whole_cost'].sum()
Out[13]:
user_id
2012-10-31 1 2154
3 623
2012-12-31 3 90
2013-01-31 1 280
3 312
2013-02-28 1 259
5 718
2013-03-31 1 201
5 1102
Name: whole_cost, dtype: int64
直到 0.14 我认为你坚持做两个 groupbys:
In [14]: g = df.groupby('user_id')['whole_cost']
In [15]: g.resample('M', how='sum').dropna()
Out[15]:
user_id
1 2012-10-31 2154
2013-01-31 280
2013-02-28 259
2013-03-31 201
3 2012-10-31 623
2012-12-31 90
2013-01-31 312
5 2013-02-28 718
2013-03-31 1102
dtype: float64
关于python - 在 python/pandas 中按月分组每日数据,而 firSTLy 按用户 id 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22772619/