python - 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 并且对如何继续感到困惑......
对编程非常陌生,我非常感谢一些指导。
谢谢!
解决方案
对于 Pandas / NumPy,您应该尽可能使用矢量化方法。apply
+pd.Series
是一个低效的 Python 级循环。
例如,使用itertools.chain
and 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
推荐阅读
- python - 所以我想匹配一个数字和一个名字。你能解释一下这段代码中这个符号的含义吗?问题在评论里面
- javascript - 是的验证;同一个字段可以接受不同的类型吗?
- amazon-cloudfront - AWS CDK CfnDistribution attrDomainName '
' - sql - 保留关键字作为 JPA 查询中的标识符
- javascript - 无法在反应 js 中获得“道具”-下一个 js 应用程序
- python - 如何更改熊猫数据框中多索引的外层索引?
- flutter - 颤动的未来
我想返回布尔值 - python - 在 Python 中下载和解压 zip 文件
- mysql - Count(*) MySQL - 需要显示有多少实体的计数为 4 或更高
- python - 如果需要太多时间,我该如何继续 for 循环?