我找到了有关如何对多索引重新采样的描述:
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/