【问题标题】:unnest (explode) multiple list 2.0取消嵌套(爆炸)多个列表 2.0
【发布时间】:2019-10-18 00:45:44
【问题描述】:

背景

以下代码从这里修改 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,而是有适当的AppC 名称:

    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

问题

如何获得我想要的输出?

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    只需添加 ffill 即可修复您的输出

    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
    

    【讨论】:

    • 使用你的代码我没有得到你的输出。除了Ban 列之外,我得到了您的输出
    • @ER_18 你把它分配回去了吗?
    • “分配回去”是什么意思?我不知道。我刚刚复制并粘贴了您的代码
    • @ER_18 df=df.set_index('Ban').apply(lambda x: x.apply(pd.Series).stack()).groupby(level=0).ffill() .reset_index(drop=True)
    • 我复制并粘贴了您的代码,但我仍然没有收到ban
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2022-11-11
    • 2022-11-03
    • 2022-01-10
    相关资源
    最近更新 更多