Я пытаюсь уменьшить фрейм данных 6 столбцов x 2 строки, например, в фрейм данных 3 столбца x 2 строки на основе предварительно рассчитанных ячеек.
У меня есть фрейм данных, который выглядит, например, так:
df =
0 1 2 3 4 5 6 etc
0 3 4 5 2 4 1 2 etc
1 5 1 3 5 2 2 3 etc
и список списков, который выглядит так:
dir = [[0,1,2],[3,4],[5,6]]
Этот список списков представляет заголовки столбцов.
Я хочу перебирать строки в моем фрейме данных и интерполировать новые значения на основе длины каждого списка. В основном просто возьмите среднее значение на основе заголовков столбцов. Например, список [0,1,2] содержит 3,4,5 значений, поэтому новое значение должно быть (3+4+5)/3 = 4.
Новый фрейм данных должен выглядеть так:
df1 =
0 1 2
0 4 3 1.5
1 3 3.5 2.5
Создайте вспомогательный словарь, столбцы rename
и используйте mean
для агрегирования по именам новых столбцов:
L = [[0,1,2],[3,4],[5,6]]
d = {k: i for i, x in enumerate(L) for k in x}
print (d)
{0: 0, 1: 0, 2: 0, 3: 1, 4: 1, 5: 2, 6: 2}
df = df.rename(columns=d).mean(axis=1, level=0)
print (df)
0 1 2
0 4.0 3.0 1.5
1 3.0 3.5 2.5
Деталь:
print (df.rename(columns=d))
0 0 0 1 1 2 2
0 3 4 5 2 4 1 2
1 5 1 3 5 2 2 3