慕雪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()
)