python - 如何计算 pandas 中重新采样的多索引数据帧

标签 python pandas time-series hierarchical-data

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

Resampling Within a Pandas MultiIndex

但是,一旦我使用 count 而不是 sum,解决方案就不再起作用

这可能与:Resampling with 'how=count' causing problems

无法使用计数字符串:

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'))

产量(注意“状态”没有重复):

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

最佳答案

当使用count时,state不是一个令人讨厌的列(它可以对字符串进行计数),因此resample将对其应用计数(尽管输出不是我所期望的)。您可以执行类似的操作(告诉它仅将 count 应用于 value_a),

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

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

或者更一般地说,您可以将不同类型的方式应用于不同的列:

>>> 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

关于python - 如何计算 pandas 中重新采样的多索引数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688355/

相关文章:

python - 当一列用管道分隔时,如何读取 pandas 中的 CSV?

python - pandas agg 和 apply 函数有什么区别?

r - R中的季节调整包(人口普查局)仅调整一半数据

python - 无法使用请求从脚本标签中抓取不同专辑的链接?

python - 向网络图添加边时出错 : 'v_of_edge'

python - 使用 python 和 boto3 在 s3 中公开一个文件

python - 更改 DataFrame 最后一行中的元素

python - 在索引地理数据框时维护地理结构

python - statespace.SARIMAX model : why the model use all the data to train mode, 和 train 模型预测范围

azure - 将 Azure 数据工厂与 InfluxDB 连接