Dikdörtgenlerim var (kare olarak kabul edilemez) Pandas DataFrame sayılar. Köşegen bir yön seçtiğimi ("üst yarıçaptan alçağa doğru" veya "üst kısma indir") diyorum. Girişleri, seçili paralel köşegen dizisi boyunca orijinal DataFrame'deki değerlerin toplamı olan bir dizi hesaplamak istiyorum. Hedefi tam olarak belirtmek için, köşegenlerin solda "demirlemiş" olup olmadığına veya sağda "demir atılmış" olup olmadığına karar vermelisiniz. Aşağıda, solda "demirlemiş" olduklarını farz ediyorum.Numpy/Pandalar'daki tüm paralel köşegenlerin toplamını oluşturmanın doğrudan yolu?
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
ben şöyle diyagonal toplamları "upperleft lowerright için" hesaplayabiliriz:
ben çok fazla sorun olmadan yapabilirsiniz
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
Ve hesaplayabilir "upperright lowerleft için "önceki içinde shift(i)
için shift(-i)
saygısız diyagonal toplamlar:
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
Bu sonuçların tümü doğrudur (örn. Bu kod istediğimi yapar. Bu miktarları Pandalar veya Numpy'de hesaplamak için daha doğrudan bir yol var mı?
İlgili: http://stackoverflow.com/q/10792897 ve http://stackoverflow.com/q/28917414 –