Python 熊猫数据帧整形的有效解决方案

Python 熊猫数据帧整形的有效解决方案,python,pandas,python-2.7,dataframe,time-complexity,Python,Pandas,Python 2.7,Dataframe,Time Complexity,我有一个像 id col1 col2 col3 ......col25 1 a b c d ........... 2 d e f NA ........ 3 a NA NA NA ....... 我想要的是: id start end 1 a b 1 b c 1 c d 2 d e 2 e f for names, row in data_final.iterrows(): for i in range(0,26): try: x = pd.

我有一个像

id col1 col2 col3 ......col25
1 a b c d ...........
2 d e f NA ........
3 a NA NA NA .......
我想要的是:

id start end
1 a b
1 b c
1 c d
2 d e
2 e f

for names, row in data_final.iterrows():
    for i in range(0,26):
        try:
            x = pd.Series([row["id"],row[i], row[i+1]],index=['id', 'start','end'])
            df1 = df1.append(x, ignore_index = True)
        except:
            break
这是可行的,但它肯定不是最好的解决方案,因为它的时间复杂度太高。 我需要一个更好、更有效的解决方案

一种方法是删除缺少的值,
groupby
zip
将每个元素与后续元素聚合。我们只需要将结果展平并创建一个数据帧:

from itertools import chain
l = [list(zip(v.values[:-1], v.values[1:])) for _,v in df.stack().groupby(level=0)]
pd.DataFrame(chain.from_iterable(l), columns=['start', 'end'])

  start end
0     a   b
1     b   c
2     c   d
3     d   e
4     e   f

但此文件中缺少ID列。在我的实际数据帧中,我的ID是字符串。转换后,我希望它位于ID列中。