嵌套(爆炸)多个列表2.0 [英] unnest (explode) multiple list 2.0

查看:32
本文介绍了嵌套(爆炸)多个列表2.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

背景

下面的代码是从此处修改的
在(一个)熊猫数据帧中嵌套(爆炸)多个列表列的有效方法

The following code is modified from here Efficient way to unnest (explode) multiple list columns in a pandas DataFrame

我创建一个数据框

import pandas as pd
df = pd.DataFrame({'App': ['x1','x2','x3', 'x4'], 'Ban':['v1','v2','v3','v4'], 'C':[['c2'],['c3','c4'],['c5','c6'],['c7','c8']],'D':[['d1','d2'],['d3','d4'],['d5','d6'],['d7','d8']], 'E':[['e1','e2'],['e3','e4'],['e5','e6'],['e7','e8']]})
df

如下所示

   App Ban    C             D         E
0   x1  v1  [c2]        [d1, d2]    [e1, e2]
1   x2  v2  [c3, c4]    [d3, d4]    [e3, e4]
2   x3  v3  [c5, c6]    [d5, d6]    [e5, e6]
3   x4  v4  [c7, c8]    [d7, d8]    [e7, e8]

然后我使用以下代码

(df.set_index('Ban')
              .apply(lambda x: x.apply(pd.Series).stack())
              .reset_index()
              .drop('level_1', 1))

创建以下内容的

    Ban App C   D   E
0   v1  x1  c2  d1  e1
1   v1  NaN NaN d2  e2
2   v2  x2  c3  d3  e3
3   v2  NaN c4  d4  e4
4   v3  x3  c5  d5  e5
5   v3  NaN c6  d6  e6
6   v4  x4  c7  d7  e7
7   v4  NaN c8  d8  e8

所需的输出

这接近我想要的。但是我想要的输出是这个(没有 NaN ,而是有合适的 App C 名称:

This is close to what I want. But my desired output is this (no NaN but instead having the appropriate App and C name:

    Ban App C   D   E
0   v1  x1  c2  d1  e1
1   v1  x1  c2  d2  e2
2   v2  x2  c3  d3  e3
3   v2  x2  c4  d4  e4
4   v3  x3  c5  d5  e5
5   v3  x3  c6  d6  e6
6   v4  x4  c7  d7  e7
7   v4  x4  c8  d8  e8

问题

如何获得所需的输出?

推荐答案

只需通过添加填充

df.set_index('Ban').apply(lambda x: x.apply(pd.Series).stack()).groupby(level=0).ffill().reset_index(drop=True)
Out[794]: 
  Ban App   C   D   E
0  v1  x1  c2  d1  e1
1  v1  x1  c2  d2  e2
2  v2  x2  c3  d3  e3
3  v2  x2  c4  d4  e4
4  v3  x3  c5  d5  e5
5  v3  x3  c6  d6  e6
6  v4  x4  c7  d7  e7
7  v4  x4  c8  d8  e8

这篇关于嵌套(爆炸)多个列表2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆