我正在尝试将数据框中的串联列取消分组。特别是我正在尝试转换
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)
但是做一件如此简单的事情似乎令人费解。有没有更好的方法可以使用熊猫来做到这一点?
答案 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