2017-10-06 68 views
2

設置串連沿對角線關閉

import pandas as pd 
from string import ascii_uppercase 

df = pd.DataFrame(np.array(list(ascii_uppercase[:25])).reshape(5, 5)) 

df 

    0 1 2 3 4 
0 A B C D E 
1 F G H I J 
2 K L M N O 
3 P Q R S T 
4 U V W X Y 

問題
如何串連沿對角線斷絃弦?

預期結果

0  A 
1  FB 
2  KGC 
3  PLHD 
4 UQMIE 
5  VRNJ 
6  WSO 
7  XT 
8  Y 
dtype: object 

我試過

df.unstack().groupby(sum).sum() 

這工作得很好。但@ Zero的答案要快得多。

+0

@pirRSquared非常類似於https://stackoverflow.com/questions/6313308/get-all-the-diagonals-in-a-matrix-list-of-lists-in-python – Dark

回答

3

你可以做

In [1766]: arr = df.values[::-1, :] # or np.flipud(df.values) 

In [1767]: N = arr.shape[0] 

In [1768]: [''.join(arr.diagonal(i)) for i in range(-N+1, N)] 
Out[1768]: ['A', 'FB', 'KGC', 'PLHD', 'UQMIE', 'VRNJ', 'WSO', 'XT', 'Y'] 

In [1769]: pd.Series([''.join(arr.diagonal(i)) for i in range(-N+1, N)]) 
Out[1769]: 
0  A 
1  FB 
2  KGC 
3  PLHD 
4 UQMIE 
5  VRNJ 
6  WSO 
7  XT 
8  Y 
dtype: object 

你也可以這樣做,但arr.diagonal(i).sum()''.join更加明確。

+0

這很美!你可以做'arr = df.values [:: - 1,:]'並且通過理解避免每次迭代的垂直翻轉? – piRSquared