Python 如何计算熊猫中重采样的多索引数据帧

Python 如何计算熊猫中重采样的多索引数据帧,python,pandas,time-series,hierarchical-data,Python,Pandas,Time Series,Hierarchical Data,我找到了关于如何对多索引重新采样的描述: 但是,只要我使用计数而不是求和,解决方案就不再有效了 这可能与: 不工作计数和字符串: values_a =[1]*16 states = ['Georgia']*8 + ['Alabama']*8 #cities = ['Atlanta']*4 + ['Savanna']*4 + ['Mobile']*4 + ['Montgomery']*4 dates = pd.DatetimeIndex([datetime.datetime(2012,1,1)+

我找到了关于如何对多索引重新采样的描述:

但是,只要我使用计数而不是求和,解决方案就不再有效了

这可能与:

不工作计数字符串

values_a =[1]*16
states = ['Georgia']*8 + ['Alabama']*8
#cities = ['Atlanta']*4 + ['Savanna']*4 + ['Mobile']*4 + ['Montgomery']*4
dates = pd.DatetimeIndex([datetime.datetime(2012,1,1)+datetime.timedelta(days = i) for i in range(4)]*4)
df2 = pd.DataFrame(
    {'value_a': values_a},
    index = [states, dates])
df2.index.names = ['State', 'Date']
df2.reset_index(level=[0], inplace=True)
print(df2.groupby(['State']).resample('W',how='count'))
收益率:

         2012-01-01           2012-01-08         
              State  value_a       State  value_a
State                                            
Alabama           2        2           6        6
Georgia           2        2           6        6
数字作为值的工作版本

values_a =[1]*16
states = ['Georgia']*8 + ['Alabama']*8
#cities = ['Atlanta']*4 + ['Savanna']*4 + ['Mobile']*4 + ['Montgomery']*4
dates = pd.DatetimeIndex([datetime.datetime(2012,1,1)+datetime.timedelta(days = i) for i in range(4)]*4)
df2 = pd.DataFrame(
    {'value_a': values_a},
    index = [states, dates])
df2.index.names = ['State', 'Date']
df2.reset_index(level=[0], inplace=True)
print(df2.groupby(['State']).resample('W',how='sum'))
收益率(注意“状态”没有重复):


当使用
count
时,state不是一个讨厌的列(它可以计算字符串),因此
重采样
将对其应用count(尽管输出不是我所期望的)。您可以执行以下操作(告诉它仅将
count
应用于
value\u a

或者更一般地说,您可以对不同的列应用不同类型的
how

>>> print df2.groupby(['State']).resample('W',how={'value_a':'count','State':'last'})

                      State  value_a
State   Date                        
Alabama 2012-01-01  Alabama        2
        2012-01-08  Alabama        6
Georgia 2012-01-01  Georgia        2
        2012-01-08  Georgia        6
因此,尽管上面允许您对重新采样的多索引数据帧进行计数,但它并没有解释从
how='count'
输出的行为。以下是我期望它的行为方式:

print df2.groupby(['State']).resample('W',how={'value_a':'count','State':'count'})

                   State  value_a
State   Date                      
Alabama 2012-01-01      2        2
        2012-01-08      6        6
Georgia 2012-01-01      2        2
        2012-01-08      6        6

@卡尔·德索尔恩是正确的;这将在0.14/master中实现(即将发布),请参阅文档


在0.14之前,很难使用基于时间的石斑鱼和另一种石斑鱼进行分组/重新采样<代码>pd。Grouper允许一个非常灵活的规范来实现这一点。

谢谢!石斑鱼听起来不错!@Karl D.你想把答案也贴在这里吗:这个链接把我带到了这个问题上。对不起,我是说这个:是的,看起来确实有关系。
>>> print df2.groupby(['State']).resample('W',how={'value_a':'count','State':'last'})

                      State  value_a
State   Date                        
Alabama 2012-01-01  Alabama        2
        2012-01-08  Alabama        6
Georgia 2012-01-01  Georgia        2
        2012-01-08  Georgia        6
print df2.groupby(['State']).resample('W',how={'value_a':'count','State':'count'})

                   State  value_a
State   Date                      
Alabama 2012-01-01      2        2
        2012-01-08      6        6
Georgia 2012-01-01      2        2
        2012-01-08      6        6
In [118]: df2.groupby([pd.Grouper(level='Date',freq='W'),'State']).count()
Out[118]: 
                    value_a
Date       State           
2012-01-01 Alabama        2
           Georgia        2
2012-01-08 Alabama        6
           Georgia        6