重塑熊猫数据框的有效解决方案

时间:2020-04-29 16:36:10

标签: 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.Series([row["id"],row[i], row[i+1]],index=['id', 'start','end'])
            df1 = df1.append(x, ignore_index = True)
        except:
            break

这可行,但绝对不是最佳解决方案,因为它的时间复杂度太高。 我需要一个更好,更有效的解决方案。

1 个答案:

答案 0 :(得分:1)

一种方法可能是stack删除缺失值,groupbyzip将每个元素与后一个元素聚合在一起。我们只需要使用itertools.chain将结果展平并创建一个数据框:

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