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
有人可以帮忙吗?我之前发布了一个类似(更简单)的问题,但是由于复杂性增加并且这里的解决方案不适用于两者var1
并且var2
有多个条目由/
.
谢谢
解决方案
这是join
+ explode
then的一种方式shift
df_input['New']=df_input[['var1','var2']].agg('/'.join,1).str.split('/')
df=df_input.explode('New')
df['New2']=df.groupby(level=0).New.shift(-1)
df=df.dropna(subset=['New2'],axis=0)
df
var1 var2 var3 New New2
0 A/A1 x/y/z abc1 A A1
0 A/A1 x/y/z abc1 A1 x
0 A/A1 x/y/z abc1 x y
0 A/A1 x/y/z abc1 y z
1 B xx/yy abc2 B xx
1 B xx/yy abc2 xx yy
2 c zz abcd c zz
推荐阅读
- c# - 在标准 DataGridView 中聚焦一行 - 不仅仅是选择
- css - 使用 CSS 对角线切割背景颜色
- javascript - 在jquery中获取单个文本框的多个空值
- java - 滑动回收视图无法正常工作
- angularjs - 在 AWS 中更改密码尝试超过用户需要等待多长时间
- php - [Microsoft][ODBC Driver 11 for SQL Server][SQL Server] SQLSTATE: 42000, CODE: 3980
- javascript - facebook sdk 和 customerchat 冲突 fb-root 覆盖
- javascript - 运行时遇到“变量已声明但从未使用”。每个
- python - python setuptools setup,模块安装,文件结构似乎没问题但不起作用
- python - 使用 pandas 函数如何对为个人完成的相同代码进行以下分析