【问题标题】:GroupBy in pandas divided by date range大熊猫中的 GroupBy 除以日期范围
【发布时间】:2016-01-21 18:43:09
【问题描述】:

我需要在 pandas 中执行一个复杂的 groupBy 并除以日期范围。

                                PROFIT   TOTAL  MATCH_HOME  PROFIT_2
LEAGUE  MATCH_DATE  MATCH_HOME              
   1    2007-06-05  (1.2, 1.6]  -20.00    1.00      1.55     21.00
   2    2007-08-10  (2.4, 2.8]   19.50    0.50      2.50    -19.00
   5    2012-04-05    (2, 2.4]   18.20    0.20      2.40    -18.00
        2014-09-05    (2, 2.4]  -14.00    1.40      2.20     15.40

我通过下一个代码得到了这个数据框:

bins = np.linspace(0, 10, 25, endpoint=False)
g1 = dfml.groupby([dfml.LEAGUE, dfml.MATCH_DATE, 
                   pd.cut(dfml.MATCH_HOME, bins)]).agg({'MATCH_HOME' : 'min',
                                                        'PROFIT': sum,
                                                        'PROFIT_2': sum,
                                                        'TOTAL': sum
                                                       })
g1[g1['TOTAL'] > 0]

如何按Month 而不是Day 分组?

【问题讨论】:

  • IIUC 您可以将日期时间转换为期间-df['MATCH_DATE'] = df['MATCH_DATE'].dt.to_period('M')`

标签: python python-2.7 pandas dataframe


【解决方案1】:

也许你可以使用dt.month:

bins = np.linspace(0, 10, 25, endpoint=False)
g1 = dfml.groupby([dfml.LEAGUE, dfml.MATCH_DATE.dt.month, 
                   pd.cut(dfml.MATCH_HOME, bins)]).agg({'MATCH_HOME' : 'min',
                                                        'PROFIT': sum,
                                                        'PROFIT_2': sum,
                                                        'TOTAL': sum
                                                       })
g1[g1['TOTAL'] > 0]

或者如果您需要年份和月份,请将datetime 转换为period

df['MATCH_DATE'] = df['MATCH_DATE'].dt.to_period('M')

【讨论】:

    猜你喜欢
    • 2018-11-24
    • 2019-05-08
    • 2019-09-04
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2021-06-30
    • 2020-03-06
    • 2018-07-13
    相关资源
    最近更新 更多