猿问

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

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

我想把包含一个列表的熊猫单元格变成每个值的行。

所以,拿着这个:

如果我想在nearest_neighbors列,以便每个值都是每个值中的一行。opponent索引,我该怎么做呢?有熊猫的方法是为了这样的操作吗?


撒科打诨
浏览 861回答 3
3回答

慕雪6442864

在下面的代码中,我首先重置索引以使行迭代更容易。我创建了一个列表,其中外部列表的每个元素都是目标DataFrame的一行,内部列表的每个元素都是其中的一个列。这个嵌套列表最终将被连接起来,以创建所需的DataFrame。我用的是lambda函数与列表迭代一起创建每个元素的行。nearest_neighbors与相关name和opponent.最后,我从这个列表中创建了一个新的DataFrame(使用原始列名并将索引设置为name和opponent).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()      )
随时随地看视频慕课网APP

相关分类

Python
我要回答