Python 从数据帧中包含的列表向数据帧动态添加列

Python 从数据帧中包含的列表向数据帧动态添加列,python,pandas,Python,Pandas,我有一个数据框,其中第一列包含一个随机大小的列表,每个列表中的项目从0到大约10个。此数据帧还包含其他几列数据 我想插入尽可能多的列作为最长列表的长度,然后按顺序填充值,这样每列都有一个列中的列表项 我不确定有什么好办法来解决这个问题 sample = [[[0,2,3,7,8,9],2,3,4,5],[[1,2],2,3,4,5],[[1,3,4,5,6,7,8,9,0],2,3,4,5]] headers = ["col1","col2","col3","col4","col5"] df =

我有一个数据框,其中第一列包含一个随机大小的列表,每个列表中的项目从0到大约10个。此数据帧还包含其他几列数据

我想插入尽可能多的列作为最长列表的长度,然后按顺序填充值,这样每列都有一个列中的列表项

我不确定有什么好办法来解决这个问题

sample = [[[0,2,3,7,8,9],2,3,4,5],[[1,2],2,3,4,5],[[1,3,4,5,6,7,8,9,0],2,3,4,5]]
headers = ["col1","col2","col3","col4","col5"]
df = pd.DataFrame(sample, columns = headers)
在本例中,我想在第1列之后添加9列,因为这是数据帧第三行中列表的最大长度。这些列将填充以下内容:

 0 2  3    7    8     9  NULL NULL NULL in the first row,
 1 2 NULL NULL NULL NULL NULL NULL NULL in the second, etc... 
编辑以适应OPs编辑 我会这样做的。首先,我将填充原始列的列表,以便它们的长度相同,并且更容易使用它们。之后,需要创建列并用列表中相应位置的值填充它。假设我们的列表大小为4,以获得更简单的示例:

df = pd.DataFrame(sample, columns = headers)
df = df.rename(columns={'col1':'col_of_lists'})
max_length = max(df['col_of_lists'].apply(lambda x:len(x)))
df['col_of_lists'] = df['col_of_lists'].apply(lambda x:x + ([np.nan] * (max_length - len(x))))
for i in range(max_length):
    df['col_'+str(i)] = df['col_of_lists'].apply(lambda x: x[i])
result.columns = [
    'col1_{}'.format(i + 1)
    for i in result.columns]

将一系列列表转换为单独列的最简单方法是使用
apply
将它们转换为一系列,这将触发
'expand'
结果类型:

result = df['col1'].apply(pd.Series)
此时,我们可以将自动编号的列调整为包含原始
'col1'
的名称,例如:

df = pd.DataFrame(sample, columns = headers)
df = df.rename(columns={'col1':'col_of_lists'})
max_length = max(df['col_of_lists'].apply(lambda x:len(x)))
df['col_of_lists'] = df['col_of_lists'].apply(lambda x:x + ([np.nan] * (max_length - len(x))))
for i in range(max_length):
    df['col_'+str(i)] = df['col_of_lists'].apply(lambda x: x[i])
result.columns = [
    'col1_{}'.format(i + 1)
    for i in result.columns]
最后,我们可以将其连接回原始数据帧。使用这是第一列这一事实使它变得简单,只需将它连接到原始帧的左侧,在过程中删除原始的
'col1'

result = result.join(df.drop('col1', axis=1))
通过使用
rename()
方法更改列名,您甚至可以将这一切作为一行代码来完成:

df['col1'].apply(pd.Series).rename(
    lambda i: 'col1_{}'.format(i + 1),
    axis=1,
).join(df.drop('col1', axis=1))

你能举个例子吗?请用一个可复制的示例数据框构建一些代码,并显示你想要得到什么,以及你当前的尝试是什么。这将极大地帮助他人给出相关的答案。顺便说一句,作为一个新用户,你们应该阅读,以了解如何在这个网站上提出问题…你们试过我的答案吗?该解决方案以与示例集相同的方式应用