У меня есть набор данных некоторых временных рядов, который выглядит следующим образом:
df <- tibble(location = c('f1','f1','f1','f1'),
year = c('1999','1999','1999','1999'),
day = c('01-01','01-02','01-01','01-02'),
variable = c('var1','var1','var2','var2'),
value = c(1.0, 3.0, "option1","option2"))
В R я могу преобразовать это так, чтобы у меня была такая структура данных, где я использую местоположение + год как 1ось, день как другой, и моя переменная как третий, с reshape2::acast
:
> reshape2::acast(df, location + year ~ day ~ variable)
, , var1
01-01 01-02
f1_1999 "1" "3"
, , var2
01-01 01-02
f1_1999 "option1" "option2"
Как я могу добиться того же эффекта с кадром данных Pandas?Моя первая попытка была использовать pivot
или pivot_table
, но я думаю, что я неправильно понимаю, как они работают: pandas.pivot_table(df, index = ['location','year'], columns = 'day', values = 'variable')
выдает ошибку DataError: No numeric types to aggregate
.Для данного pandas dataframe:
import pandas as pd
df = pd.DataFrame({
'location': ['f1','f1','f1','f1'],
'year': ['1999','1999','1999','1999'],
'day': ['01-01','01-02','01-01','01-02'],
'variable': ['var1','var1','var2','var2'],
'value': [1.0, 3.0, 'option1','option2']
})
Есть ли способ достичь такой же структуры данных в R (с чем-то вроде numpy массивов)?