为了账号安全,请及时绑定邮箱和手机立即绑定

如何将Dataframe单元格内的列表分解为不同的行

如何将Dataframe单元格内的列表分解为不同的行

撒科打诨 2019-07-13 10:11:49
如何将Dataframe单元格内的列表分解为不同的行我想把包含一个列表的熊猫单元格变成每个值的行。所以,拿着这个:如果我想在nearest_neighbors列,以便每个值都是每个值中的一行。opponent索引,我该怎么做呢?有熊猫的方法是为了这样的操作吗?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

在下面的代码中,我首先重置索引以使行迭代更容易。

我创建了一个列表,其中外部列表的每个元素都是目标DataFrame的一行,内部列表的每个元素都是其中的一个列。这个嵌套列表最终将被连接起来,以创建所需的DataFrame。

我用的是lambda函数与列表迭代一起创建每个元素的行。nearest_neighbors与相关nameopponent.

最后,我从这个列表中创建了一个新的DataFrame(使用原始列名并将索引设置为nameopponent).

df = (pd.DataFrame({'name': ['A.J. Price'] * 3, 
                    'opponent': ['76ers', 'blazers', 'bobcats'], 
                    'nearest_neighbors': [['Zach LaVine', 'Jeremy Lin', 'Nate Robinson', 'Isaia']] * 3})
      .set_index(['name', 'opponent']))>>> df
                                                    nearest_neighbors
name       opponent                                                  
A.J. Price 76ers     [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia]
           blazers   [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia]
           bobcats   [Zach LaVine, Jeremy Lin, Nate Robinson, Isaia]df.reset_index(inplace=True)rows = []_ = df.apply(lambda row: [rows.append([row['name'], row['opponent'], nn]) 
                         for nn in row.nearest_neighbors], axis=1)df_new = pd.DataFrame(rows, columns=df.columns).set_index(['name', 'opponent'])>>> df_new
                    nearest_neighbors
name       opponent                  
A.J. Price 76ers          Zach LaVine
           76ers           Jeremy Lin
           76ers        Nate Robinson
           76ers                Isaia
           blazers        Zach LaVine
           blazers         Jeremy Lin
           blazers      Nate Robinson
           blazers              Isaia
           bobcats        Zach LaVine
           bobcats         Jeremy Lin
           bobcats      Nate Robinson
           bobcats              Isaia


另一种方法如下:

>>> (pd.melt(df.nearest_neighbors.apply(pd.Series).reset_index(), 
             id_vars=['name', 'opponent'],
             value_name='nearest_neighbors')
     .set_index(['name', 'opponent'])
     .drop('variable', axis=1)
     .dropna()
     .sort_index()
     )


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 860 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信