Группировка DataFrame по N столбцам или N строкам
Я хотел бы найти общее решение для группировки DataFrame по указанному количеству строк или столбцов. Пример DataFrame:
df = pd.DataFrame(0, index=['a', 'b', 'c', 'd', 'e', 'f'], columns=['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'])
c1 c2 c3 c4 c5 c6 c7
a 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0
Например, я хотел бы сгруппировать по 2 рядам за раз и применить функцию типа среднее или подобное. Я также хотел бы знать, как сгруппировать по N столбцам время и применить функцию.
Сгруппируйте по 2 строкам ожидаемый результат:
c1 c2 c3 c4 c5 c6 c7
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
Сгруппируйте по 2 столбцам ожидаемый результат:
0 1 2 3
a 0 0 0 0
b 0 0 0 0
c 0 0 0 0
d 0 0 0 0
e 0 0 0 0
f 0 0 0 0
1 ответ
Решение
Это группы по N строк
>>> N=2
>>> df.reset_index(drop=True).groupby(by=lambda x: x/N, axis=0).mean()
c1 c2 c3 c4 c5 c6 c7
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
Или это:
>>> df.groupby(np.arange(len(df.index))//N, axis=0).mean()
c1 c2 c3 c4 c5 c6 c7
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
Это группы по N столбцов
>>> df.groupby(np.arange(len(df.columns))//N, axis=1).mean()
0 1 2 3
a 0 0 0 0
b 0 0 0 0
c 0 0 0 0
d 0 0 0 0
e 0 0 0 0
f 0 0 0 0