沿对角线连接字符串

时间:2017-10-06 04:28:33

标签: python pandas numpy

设置

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的回答要快得多。

1 个答案:

答案 0 :(得分: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更明确。