如何将列表列表作为列添加到现有数据框

时间:2019-01-24 03:24:09

标签: python python-3.x pandas dataframe

我创建了一个数据框“ 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 但这并没有像我预期的那样给我桌子。

1 个答案:

答案 0 :(得分:0)

首先,我们应该使用索引将列表弄平,然后使用concat的{​​{1}}方法,如下所示:

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)