如何将元组列表转换为具有不同分数的数据框

how to turn list of tuples to data frame with different scores

我有这样的数据,它是 gensim LDA 模型的输出

date       id   score   
1/1/2019    11  [(5,0.8), (11,0.2)] 
1/2/2019    21  [(4,0.7), (10,0.1)] 
1/3/2019    35  [(3,0.4)]   
1/4/2019    44  [(5,0.8),(3,0.5), (11,0.2)] 

结果应该是这样的。有人可以帮忙吗?

date        id  score   new_score
1/1/2019    11  5       0.8
1/1/2019    11  11      0.2
1/2/2019    21  4       0.7
1/2/2019    21  10      0.1
1/3/2019    35  3       0.4
1/4/2019    44  5       0.8
1/4/2019    44  3       0.5
1/4/2019    44  11      0.2

更新:

更好的方法是使用DataFrame.explode():

df = pd.read_csv('your_file_name.csv')

df = df.explode('score')
df[['score', 'new_score']] = df.score.apply(pd.Series)

您可以使用嵌套列表理解来执行此操作:

df = pd.read_csv('your_file_name.csv')

unpacked = [
    {'date': row.date, 'id': row.id, 'score': x[0], 'new_score': x[1]} 
    for _, row in df.iterrows() for x in row.score
]

df = pd.DataFrame(unpacked)

DataFrame.iterrows() returns 框架中每一行的索引和行内容的元组,因此您可以系统地解压缩它:

  1. 抓取一行
  2. 将分数元组解压为分数并new_score
  3. 将其格式化为字典中的条目(连同日期和 ID)以从
  4. 构建新框架
  5. 遍历所有行并构建最终帧