繁体   English   中英

将具有多个值的 pandas dataframe 列字符串拆分为单独的行

[英]Split pandas dataframe column string with multiple values into separate rows

我有一个 dataframe 文本字符串,它基本上代表每行一个或多个旅程。 我试图分开旅程的两条腿,这样我就可以单独看到它们。 示例输入 dataframe 如下所示:

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

我试图得到的 output 应该如下所示。 因此,对于第一个示例,旅程航段是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

有人可以帮忙吗? 我之前发布了一个类似(更简单)的问题,但是由于复杂性增加并且这里的解决方案不适用于var1var2都有多个由/分隔的条目的情况,因此重新发布。

谢谢

这是从join + explode然后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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM