在 Pandas 中将字符串从列扩展到不同的单独列

S44*_*S44 3 python data-analysis dataframe pandas

我有以下形式的 df:

id   sid      steps
A     1       step1
A     1    step1-step2
A     1  step1-step2-step3
Run Code Online (Sandbox Code Playgroud)

它包含用户如何A在给定会话 (sid) 中浏览特定系列页面(步骤)的数据。我想采取这些破折号分隔的步骤并为每个步骤创建单独的列。

结果:

id     sid      steps       page_step1 page_step2  page_step3
  A     1       step1         step1        NA           NA
  A     1    step1-step2      step1      step2          NA
  A     1  step1-step2-step3  step1      step2        step3
Run Code Online (Sandbox Code Playgroud)

我不知道到底有多少步骤,所以我希望它们是动态创建的。整个星期都被困在这个问题上,谢谢!

not*_*hal 5

使用str.split

>>> df.join(df["steps"].str.split("-",expand=True).add_prefix("page_step"))

 id  sid              steps page_step0 page_step1 page_step2
0  A    1              step1      step1       None       None
1  A    1        step1-step2      step1      step2       None
2  A    1  step1-step2-step3      step1      step2      step3
Run Code Online (Sandbox Code Playgroud)

如果编号必须从 1 而不是 0 开始:

steps = df["steps"].str.split("-",expand=True)
output = df.join(steps.rename(columns={i: f"page_setup{i+1}" for i in steps.columns}))

>>> output
  id  sid              steps page_setup1 page_setup2 page_setup3
0  A    1              step1       step1        None        None
1  A    1        step1-step2       step1       step2        None
2  A    1  step1-step2-step3       step1       step2       step3
Run Code Online (Sandbox Code Playgroud)