python - 将熊猫数据框字符串拆分为单独的行
问题描述
我有一个文本字符串数据框,它基本上代表每行一个或多个旅程。我试图分开旅程的两条腿,这样我就可以单独看到它们。示例输入数据框如下所示:
更新:
df_input = pd.DataFrame([{'var1':'A/A1', 'var2':'x/y/z', 'var3':'abc1'},
{'var1':'B', 'var2':'xx/yy', 'var3':'abc2'},
{'var1':'c', 'var2':'zz', 'var3':'abcd'}])
var1 var2 var3
0 A/A1 x/y/z abc1
1 B xx/yy abc2
2 c zz abcd
我试图得到的输出应该如下所示。所以对于第一个例子,旅程腿是A to A1 then A1 to x then x to y and then y to z
。如果还有一种方法可以添加一个额外的列来指示旅程航段编号(1、2、3 等),那将非常有帮助。var3
在这里并不重要,但我只是将它包括在内以表明当行被拆分时还有其他列会重复。
df_output = pd.DataFrame([{'var1': 'A', 'var2': 'A1', 'var3':'abc1'},
{'var1': 'A1', 'var2': 'x', 'var3':'abc1'},
{'var1': 'x', 'var2': 'y', 'var3':'abc1'},
{'var1': 'y', 'var2': 'z', 'var3':'abc1'},
{'var1': 'B', 'var2': 'xx', 'var3':'abc2'},
{'var1': 'xx', 'var2': 'yy', 'var3':'abc2'},
{'var1': 'c', 'var2': 'zz', 'var3':'abcd'}])
var1 var2 var3
0 A A1 abc1
1 A1 x abc1
2 x y abc1
3 y z abc1
4 B xx abc2
5 xx yy abc2
6 c zz abcd
有人可以帮忙吗?
谢谢
解决方案
尝试explode
df=df_input.assign(var2=df_input.var2.str.split('/')).explode('var2')
var1 var2 var3
0 A x abc1
0 A y abc1
0 A z abc1
1 B xx abc2
1 B yy abc2
2 c zz abcd
然后groupby
+shift
df.var1=df.groupby(level=0).var2.shift().fillna(df.var1)
df
var1 var2 var3
0 A x abc1
0 x y abc1
0 y z abc1
1 B xx abc2
1 xx yy abc2
2 c zz abcd
推荐阅读
- java - 从 Nexus 存储库下载 Pi4j 快照的过程?
- javascript - 在其他 jQuery 插件上调用函数时 jQuery 脚本停止
- tree - 如何解决 prolog 中的伐木工人测验问题?
- sql - 使用循环在proc中更改表名称和日期的月份
- azure-devops - 在 Azure Devops 管道上运行 Flutter 集成测试以进行 UI 自动化测试
- ibm-cloud - IBM Cloud:如何将 Tekton Catalog 添加到持续交付工具链配置中?
- python - 使用 python-docx 流式处理生成的 word 文件
- c# - 为什么有时 IEnumerable 中的元素
是可变的,有时它们是不可变的? - .net - Npgsql 在高负载场景下使用 Redshift 的低数据检索性能
- javascript - 如何在 Google Charts Line Graph 中沿 X 轴的一半结束一条线?