首页 > 解决方案 > 从数据框中包含的列表中将列动态添加到 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 = 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... 

标签: pythonpandas

解决方案


编辑以适应 OP 编辑

我就是这样做的。首先,我将填充原始列的列表,使它们的长度都相同,并且更容易使用它们。之后就是创建列并用与列表中的位置对应的值填充它。假设我们的列表最大为 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])

推荐阅读