首页 > 解决方案 > 如何将列表列表作为列添加到现有数据框

问题描述

我创建了一个数据框“df”,如下所示:

   Name
0. School
1. Organisation 
2. Teacher 
3. Guest

现在我有三个列表

1. from=['12','18',['11','10'],['12','4','8']]
2. to = [['11','9'],'','8','3']
3. status = ['yes','no',['yes','no'],'']

我想将这 3 个列表添加到我现有的数据框 df 中,它应该看起来像这样

  Name          From   To   Status
0. School        12    11   Yes
0. School               9
1. Organisation  18         No
2. Teacher       11     8   Yes
2. Teacher       10         No
3. Guest         12     3
3. Guest          4
3. Guest          8

我试过了df['from']=fromdf['to']=to 但这并没有像我预期的那样给我桌子。

标签: pythonpython-3.xpandasdataframe

解决方案


首先,我们应该用索引来展平列表,然后使用这样的concat方法pandas

import pandas as pd
df = pd.DataFrame({"Name":["School","Organisation","Teacher","Guest"]})
From = ['12','18',['11','10'],['12','4','8']]
def flat(nums):
    res = []
    index = []
    for i in range(len(nums)):
        if isinstance(nums[i], list):
            res.extend(nums[i])
            index.extend([i]*len(nums[i]))
        else:
            res.append(nums[i])
            index.append(i)
    return res,index
x="From"
list_flat,list_index=flat(eval(x))
dataframe = pd.DataFrame({x:list_flat},index=list_index)
df = pd.concat([df['Name'],dataframe],axis=1,sort=False)

结果是:

           Name From
0        School   12
1  Organisation   18
2       Teacher   11
2       Teacher   10
3         Guest   12
3         Guest    4
3         Guest    8

推荐阅读