python - 在 python/pandas 中按月分组每日数据,而 firSTLy 按用户 id 分组

标签 python pandas

我在 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/

相关文章:

python - 使用 *not* 在 pandas groupby 中进行分组的标签

python - 如何从 Pandas 数据框中的另一列所有值和聚合中的另一列创建新列名称?

python - 使用 Python 进行谷歌搜索

Python 转义序列和字符串操作

python - 尝试在 Python 中将一种对象类型转换为另一种对象类型

python - 根据列的重复值折叠数据框并删除 NaN 值

python Pandas : Keeping only dataframe rows containing first occurrence of an item

Python 3 如何在将 UTF-8 写入文件时忽略错误

python - 如何在python中获取嵌套字典的内部索引

python - pandas.groupby 的 group_keys 参数实际上是做什么的?