为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尚方宝剑之说 2021-10-19 10:30:50
我创建了一个数据框“df”,如下所示:   Name0. School1. 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   Status0. School        12    11   Yes0. School               91. Organisation  18         No2. Teacher       11     8   Yes2. Teacher       10         No3. Guest         12     33. Guest          43. Guest          8我试过了df['from']=from,df['to']=to 但这并没有像我预期的那样给我桌子。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

首先,我们应该用索引压平列表,然后使用这样的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


查看完整回答
反对 回复 2021-10-19
  • 1 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信