У меня есть DataFrame, который выглядит так:

(Столбцы - это номера месяцев)

     Year    level_0    1           2           3
0   1950    Prec    1.176959    2.422704    1.911290
1   1950    TempMax 14.752511   16.801811   19.213571
2   1950    TempMed 10.168848   12.086479   14.225829
3   1950    TempMin 5.883087    7.504439    9.417972
4   1951    Prec    4.294701    4.976021    4.160138
(...)

Как получить вложенный список, где каждый элемент списка представляет собой матрицу с 4 строками (Prec, TempMax, TempMed, TempMin) и 3 столбцами (1,2,3) и матрицей для каждого года (но не включая год и столбец Level_O)?

Output Example: [[[1.176959, 2.422704, 1.911290],[14.752511, 16.801811, 19.213571],[10.168848, 12.086479, 14.225829],[5.883087, 7.504439, 9.417972]],[...],[...]]
1
igdc 9 Апр 2021 в 10:24

1 ответ

Лучший ответ

Используйте DataFrame.groupby по годам с преобразованием столбцов в списки по группам в лямбда-функции:

Примечание: если имена столбцов являются строками, используйте ['1','2','3']

L = df.groupby('Year')[[1,2,3]].apply(lambda x: x.to_numpy().tolist()).tolist()

Или в списке понимания:

L = [x[[1,2,3]].to_numpy().tolist() for i, x in df.groupby('Year')]

print (L)
[[[1.176959, 2.422704, 1.91129], 
  [14.752511, 16.801811, 19.213571], 
  [10.168848, 12.086479, 14.225829], 
  [5.883087, 7.504439, 9.417972]],
 [[4.294701, 4.976021, 4.160138]]]
2
jezrael 9 Апр 2021 в 07:33