2016-11-17 2 views
2

Пусть даны dataframe:Панды ресэмплировать и добавить размер в колонке

Index  A B 
2016-01-01 5 10 
2016-01-01 1 2 
2016-01-02 1 1 

Можно ли ресэмплировать DataFrame используя сумму и добавить столбец в конце DataFrame, который включает в себя количество наблюдений в бункерах таким образом, что результат:

Index  A B Count 
2016-01-01 6 12 2 
2016-01-02 1 1 1 

ответ

4

Вы можете использовать Resampler.agg или DataFrameGroupBy.agg:

df1 = df.resample('D').agg({'A':'sum', 'B':['sum', 'size']}) 
print (df1) 
      B  A 
      sum size sum 
Index     
2016-01-01 12 2 6 
2016-01-02 1 1 1 

df2 = df.groupby(level=0).agg({'A':'sum', 'B':['sum', 'size']}) 
print (df2) 
      B  A 
      sum size sum 
Index     
2016-01-01 12 2 6 
2016-01-02 1 1 1 

Если необходимо удалить MultiIndex в столбцах:

df1 = df.resample('D').agg({'A':'sum', 'B':['sum', 'size']}) 
df1.columns = ['B','Count','A'] 
df1 = df1[['A','B','Count']] 
print (df1) 
      A B Count 
Index     
2016-01-01 6 12  2 
2016-01-02 1 1  1 

df2 = df.groupby(level=0).agg({'A':'sum', 'B':['sum', 'size']}) 
df2.columns = ['B','Count','A'] 
df2 = df2[['A','B','Count']] 
print (df2) 
      A B Count 
Index     
2016-01-01 6 12  2 
2016-01-02 1 1  1 
+0

Это то, что я пытался сделать. Я не знал, что вы можете прокормить список в agg() dict. –

Смежные вопросы