按列组对python pandas中的数据frama进行分组

时间:2017-04-04 02:25:24

标签: python pandas dictionary dataframe group-by

我有一个数据框,其中包含从2000年到2016年每年每个月的列

    df.columns

输出

    Index(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06',
   '2000-07', '2000-08', '2000-09', '2000-10',
   ...
   '2015-11', '2015-12', '2016-01', '2016-02', '2016-03', '2016-04',
   '2016-05', '2016-06', '2016-07', '2016-08'],
  dtype='object', length=200)

我希望按季度对这些专栏进行分组。 我已经写了一本字典,认为这将是使用groupby然后使用aggregate和mean的最佳方法:

    m2q = {'2000q1': ['2000-01', '2000-02', '2000-03'],
           '2000q2': ['2000-04', '2000-05', '2000-06'],
           '2000q3': ['2000-07', '2000-08', '2000-09'],
                ...
           '2016q2': ['2016-04', '2016-05', '2016-06'],
           '2016q3': ['2016-07', '2016-08']}

但是

    df.groupby(m2q)

没有给我所需的输出。 事实上它给了我一个空的分组。 有什么建议使这个分组工作? 或者是一个更加蟒蛇化的解决方案,按季度分类取指定列的平均值?

1 个答案:

答案 0 :(得分:0)

您可以将索引转换为DatetimeIndex(示例1)或PeriodIndex(示例2)。

另请查看Time Series / Date functionality主题以获取更多详细信息。

import numpy as np
import pandas as pd


idx = ['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06',
   '2000-07', '2000-08', '2000-09', '2000-10', '2000-11', '2000-12']

df = pd.DataFrame(np.arange(12), index=idx, columns=['SAMPLE_DATA'])
print(df)

         SAMPLE_DATA
2000-01            0
2000-02            1
2000-03            2
2000-04            3
2000-05            4
2000-06            5
2000-07            6
2000-08            7
2000-09            8
2000-10            9
2000-11           10
2000-12           11

# Handle your timeseries data with pandas timeseries / date functionality
df.index=pd.to_datetime(df.index)

示例1

print(df.resample('Q').sum())

            SAMPLE_DATA
2000-03-31            3
2000-06-30           12
2000-09-30           21
2000-12-31           30

示例2

print(df.to_period('Q').groupby(level=0).sum())

        SAMPLE_DATA
2000Q1            3
2000Q2           12
2000Q3           21
2000Q4           30