2017-10-06 23 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 

質問私はオフの対角線に沿って文字列を連結するにはどうすればよい

私は

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

しようとしましたどのような期待される結果は

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

これが正常に動作します。しかし、@ゼロの答えはずっと速いです。

+0

@pirRSquaredはhttps://stackoverflow.com/questions/6313308/get-all-the-diagonals-in-a-matrix-list-of-lists-in-pythonとよく似ています – Dark

答えて

3

あなたはまた、arr.diagonal(i).sum()を行うことができますが、''.joinがより明示的である

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 

行うことができます。

+0

これは美しいです!あなたは 'arr = df.values [:: - 1、:]'を実行し、理解を通じたすべての反復に対して垂直フリップを避けることができますか? – piRSquared