如何将数据框转换为从到对?

How to transform dataframe to from-to pairs?

如果我有一个数据框:

>>> import pandas as pd
>>> df = pd.DataFrame([
...     ['A', 'B', 'C', 'D'],
...     ['E', 'B', 'C']
... ])
>>> df
   0  1  2     3
0  A  B  C     D
1  E  B  C  None
>>>  

我应该将数据框转换为两列格式:

x, y
-----
A, B
B, C
C, D
E, B
B, C

对于每一行,从左到右,取两个相邻值并组成一对。 如果您将每一行都视为一条路径,则有点从头到尾。

如何进行改造?

我们可以 explodezip

s=pd.DataFrame(df.apply(lambda x : list(zip(x.dropna()[:-1],x.dropna()[1:])),axis=1).explode().tolist())
Out[336]: 
   0  1
0  A  B
1  B  C
2  C  D
3  E  B
4  B  C

更新

s=df.apply(lambda x : list(zip(x.dropna()[:-1],x.dropna()[1:])),axis=1).explode()
s=pd.DataFrame(s.tolist(),index=s.index)

s
Out[340]: 
   0  1
0  A  B
0  B  C
0  C  D
1  E  B
1  B  C

预先准备数据有助于:

import pandas as pd

inp = [['A', 'B', 'C', 'D'],
       ['E', 'B', 'C']]

# Convert beforehand
inp2 = [[[i[k], i[k+1]] for k in range(len(i)-1)] for i in inp]
inp2 = inp2[0] + inp2[1]

df = pd.DataFrame(inp2)
print(df)

输出:

   0  1
0  A  B
1  B  C
2  C  D
3  E  B
4  B  C