python - 在DataFrame中多次拆分字符串
问题描述
我在 DataFrame 中有一个列,其中包含一个字符串,我必须通过不同的分隔符从中检索两条信息:
ID STR
280 11040402-38.58551%;11050101-9.29086%;11070101-52.12363%
351 11130203-35%;11130230-65%
510 11070103-69%
655 11090103-41.63463%;11160102-58.36537%
666 11130205-50.00%;11130207-50%
我一直在尝试将.apply
本系列中的方法与 lambda 函数一起使用来一次性进行拆分,但无济于事:
df['STR'].apply(lambda x: y.split('-') for y in x.split(';'))
理想情况下,我不仅可以一次性拆分字符串,还可以将左侧-
与右侧分开:
ID STR.LEFT STR.RIGHT
280 [11040402, 11050101, 11070101] [38.58551%, 9.29086%, 52.12363%]
351 [11130203, 11130230] [35%, 65%]
510 [11070103] [69%]
655 [11090103, 11160102] [41.63463%, 58.36537%]
666 [11130205, 11130207] [50.00%, 50%]
我相信这可以通过.apply
切片来实现,但欢迎任何其他解决方案。
解决方案
您可以尝试拆分多次:
# set ID as index
df.set_index('ID', inplace=True)
new_series = df.STR.str.split(';', expand=True).stack().reset_index(level=-1,drop=True)
new_df = new_series.str.split('-', expand=True)
new_df.groupby('ID').agg(list).reset_index()
输出:
ID 0 1
-- ---- ------------------------------------ --------------------------------------
0 280 ['11040402', '11050101', '11070101'] ['38.58551%', '9.29086%', '52.12363%']
1 351 ['11130203', '11130230'] ['35%', '65%']
2 510 ['11070103'] ['69%']
3 655 ['11090103', '11160102'] ['41.63463%', '58.36537%']
4 666 ['11130205', '11130207'] ['50.00%', '50%']
推荐阅读
- c++ - 我怎么能等到 Win32 线程池完成工作,外部取消?
- nats.io - NATS 流在集群和 FT 模式下提供什么消息持久性保证?
- python - Scrapy - “yield”命令的意外取消缩进
- docker - docker run:如何避免 Docker 和外部主机在 172.18.xx IP 范围内重叠
- c - 如何在使用位字段的 C 中显示结构变量的位模式?
- r - 如何在 R 中使用 glm 循环多次曝光和结果以及不同的模型?
- python - 返回检测到的簇的大小
- gitlab - 如何在 gitlab 上获取一个阶段的状态?
- php - 使用 php 在数组中使用动态值
- arrays - Bash - 对数组元素进行整个字符串匹配的最快方法?