У меня есть прямоугольник (нельзя считать квадратным) Pandas DataFrame чисел. Скажем, я выбираю диагональное направление (либо «верхний правый, либо нижний» или «сверху вниз»). Я хотел бы вычислить серию, чьи записи представляют собой суммы значений из исходного DataFrame вдоль выбранного набора параллельных диагоналей. Чтобы полностью определить цель, вам нужно решить, являются ли диагонали «закреплены» слева или «привязаны» справа. Для ниже, я предполагаю, что они «привязаны» слева.Прямой способ генерации суммы всех параллельных диагоналей в Numpy/Pandas?
я могу сделать это без особых проблем:
import numpy as np
import pandas as pd
rectdf = pd.DataFrame(np.arange(15).reshape(5,3))
# result:
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
я могу вычислить «левого верхнего к lowerright» диагональные суммы следующим образом:
ullrsums = pd.concat([rectdf.iloc[:, i].shift(-i) for i in range(rectdf.shape[1])], axis=1)\
.sum(axis=1, fillna=0)
# result:
0 12
1 21
2 30
3 22
4 12
И я могу вычислить «upperright к lowerleft "диагональные суммы по листать shift(-i)
к shift(i)
в предыдущем:
urllsums = pd.concat([rectdf.iloc[:, i].shift(i) for i in range(rectdf.shape[1])], axis=1)\
.sum(axis=1, fillna=0)
# result:
0 0
1 4
2 12
3 21
4 30
Эти результаты являются правильными (т. этот код делает то, что я хочу). Есть ли более прямой способ вычислить эти суммы в Pandas или Numpy?
См. Также http://stackoverflow.com/q/10792897 и http://stackoverflow.com/q/28917414 –