首页 > 解决方案 > Python:将两个链接的列拆分为新行

问题描述

我有以下数据框:

N1   FF1; FF2                PP1; PP2
N2   FF3                     PP3
N3   FF4; FF5; FF6           PP4; PP5; PP6

FF & PP 列有如下关系,每个FF 都链接到具有相同编号的PP,即FF1 链接到PP1,依此类推。

我需要的输出如下:

N1 FF1 PP1
N1 FF2 PP2
N2 FF3 PP3
N3 FF4 PP4
N3 FF5 PP5
N3 FF6 PP6

到目前为止,我已经尝试了以下方法:

df_copy = df["F","P"].str.split(";").apply(Series,1).stack()

但是我收到一个 KeyError 并且对如何继续感到困惑......

对编程非常陌生,我非常感谢一些指导。

谢谢!

标签: pythonpandaspython-2.7data-manipulationkeyerror

解决方案


对于 Pandas / NumPy,您应该尽可能使用矢量化方法。apply+pd.Series是一个低效的 Python 级循环。

例如,使用itertools.chainand np.repeat

from itertools import chain

df = pd.DataFrame([['N1', 'FF1; FF2', 'PP1; PP2'],
                   ['N2', 'FF3', 'PP3'],
                   ['N3', 'FF4; FF5; FF6', 'PP4; PP5; PP6']])

split1, split2 = df[1].str.split('; '), df[2].str.split('; ')
n = split1.str.len()

res = pd.DataFrame({0: df[0].values.repeat(n.values),
                    1: list(chain.from_iterable(split1)),
                    2: list(chain.from_iterable(split2))})

print(res)

    0    1    2
0  N1  FF1  PP1
1  N1  FF2  PP2
2  N2  FF3  PP3
3  N3  FF4  PP4
4  N3  FF5  PP5
5  N3  FF6  PP6

推荐阅读