将列表列表拆分为pandas数据帧

时间:2018-02-15 14:27:41

标签: python pandas

说我有以下数据框:

x = pd.DataFrame({'a':['x, y', 'x, t, x, r', 'y, t'],
          'b':[1, 0, 1]})

            a  b
0        x, y  1
1  x, t, x, r  0
2        y, t  1

我想去

  letter  num
0      x    1
1      y    1
2      x    0
3      t    0
4      x    0
5      r    0
6      y    1
7      t    1

我已经通过以下方式解决了这个问题,但我觉得我让它变得比它需要的更复杂。

x.a = x.a.str.split(",")

empty = []
for b, a in zip(x.b, x.a):
    empty.append([b] * len(a))

t = [item for sublist in empty for item in sublist]
y = [item for sublist in x.a for item in sublist]

pd.DataFrame({'letter':t, 'num':y})

   letter num
0       1   x
1       1   y
2       0   x
3       0   t
4       0   x
5       0   r
6       1   y
7       1   t

有没有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:4)

使用split首先使用正则表达式Repeater36使用逗号分隔一个或多个空格,然后numpy.repeat使用numpy.concatenate进行缩进list构造函数:

,\s+

答案 1 :(得分:3)

让我们将每行展开一行加上'a'列中的逗号数量。然后用新值覆盖列'a'

x.loc[
    x.index.repeat(x.a.str.count(', ') + 1)
].assign(
    a=', '.join(x.a).split(', ')
).rename(columns=dict(a='letter', b='num'))

  letter  num
0      x    1
0      y    1
1      x    0
1      t    0
1      x    0
1      r    0
2      y    1
2      t    1

答案 2 :(得分:2)

找到一种新方式:-)

{{1}}