熊猫数据框-取消组合串联列

时间:2019-06-25 19:20:28

标签: pandas

我正在尝试将数据框中的串联列取消分组。特别是我正在尝试转换

    a  b         c
i0  1  a     k1;k2
i1  2  b        k3
i2  3  c  k4;k5;k6
i3  4  d        k7

进入

    a  b   c
i0  1  a  k1
i0  1  a  k2
i1  2  b  k3
i2  3  c  k4
i2  3  c  k5
i2  3  c  k6
i3  4  d  k7

我设法通过代码做到了

import pandas as pd
data = pd.DataFrame({'a':[1,2,3,4],'b':list('abcd'),'c':['k1;k2','k3','k4;k5;k6','k7']},
                    index=['i'+str(i) for i in range(4)])
tmp = data['c'].str.split(';', expand=True).stack().reset_index(level=1, drop=True)
tmp.name = 'c'
data.drop('c',axis='columns',inplace=True)
data = data.join(tmp)

但是做一件如此简单的事情似乎令人费解。有没有更好的方法可以使用熊猫来做到这一点?

1 个答案:

答案 0 :(得分:0)

以下是链接(嵌套)问题中没有的答案:

(df.reset_index()
   .set_index(['index','a','b'])
   .c.str
   .split(';',expand=True)
   .stack()
   .reset_index(level=-1,drop=True)
   .reset_index(level=(1,2))
)

输出:

       a  b   0
index          
i0     1  a  k1
i0     1  a  k2
i1     2  b  k3
i2     3  c  k4
i2     3  c  k5
i2     3  c  k6
i3     4  d  k7