You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame列拆分为多列?按Id生成Nums列特征向量

搞定DataFrame列拆分与特征向量生成的两种需求

嘿,我来帮你一步步解决这两个问题!先从你提到的针对任意Id将Nums列拆分为特征向量说起,再讲通用的DataFrame单列拆分为多列的方法,全程用示例代码帮你理解。

一、针对任意Id生成Nums列的特征向量

首先咱们先模拟一个符合你需求的示例DataFrame,方便后续演示:

import pandas as pd

# 示例数据:Id重复,每个Id对应多个Nums值
df = pd.DataFrame({
    'Id': [1, 1, 2, 2, 3],
    'Nums': [10, 20, 30, 40, 50]
})

方法1:将每个Id的Nums聚合为列表(特征向量)

如果你的目标是让每个Id对应一个列表形式的特征向量,直接用groupby+agg(list)就能实现:

# 按Id分组,把每个Id对应的Nums值聚合成列表
id_feature_df = df.groupby('Id')['Nums'].agg(list).reset_index()
# 重命名列,更直观
id_feature_df.columns = ['Id', 'Feature_Vector']

运行后你会得到这样的结果:

IdFeature_Vector
1[10, 20]
2[30, 40]
3[50]

方法2:将特征向量拆分为单独的特征列

如果需要把列表形式的特征向量拆成Feature_1、Feature_2这样的独立列,可以接着用apply(pd.Series):

# 将Feature_Vector列的列表拆分为多列
feature_cols = id_feature_df['Feature_Vector'].apply(pd.Series)
# 给拆分后的列命名
feature_cols.columns = [f'Feature_{i+1}' for i in feature_cols.columns]

# 和原Id列合并,得到最终结果
final_df = pd.concat([id_feature_df[['Id']], feature_cols], axis=1)

最终结果会是:

IdFeature_1Feature_2
11020
23040
350NaN

(注:长度不足的位置会自动填充NaN,你可以用fillna(0)或者其他值替换)

二、通用的DataFrame单列拆分为多列的方法

根据列内容的不同,拆分方法也略有区别,我给你整理了三种最常见的场景:

场景1:列内容是分隔符分隔的字符串

比如你的列值是"10,20,30"这种逗号(或其他符号)分隔的字符串,用str.split()+expand=True就能快速拆分:

# 先给示例DataFrame加一列分隔符字符串
df['Nums_Str'] = ['10,20', '30,40', '50']

# 拆分字符串为多列,expand=True表示把拆分结果展开成多列
split_str_cols = df['Nums_Str'].str.split(',', expand=True)
# 给拆分后的列命名
split_str_cols.columns = ['Col1', 'Col2']

# 合并到原DataFrame
df = pd.concat([df, split_str_cols], axis=1)

场景2:列内容是列表/元组

如果列值本身就是列表或元组,直接用apply(pd.Series)就能拆成多列:

# 给示例DataFrame加一列列表类型的数据
df['Nums_List'] = [[10,20], [30,40], [50]]

# 拆分列表为多列
split_list_cols = df['Nums_List'].apply(pd.Series)
split_list_cols.columns = ['Col1', 'Col2']

# 合并到原DataFrame
df = pd.concat([df, split_list_cols], axis=1)

场景3:列内容是numpy数组

如果列值是numpy数组,除了apply(pd.Series),还可以用pd.DataFrame(tolist())来拆分:

import numpy as np

# 给示例DataFrame加一列numpy数组
df['Nums_Array'] = [np.array([10,20]), np.array([30,40]), np.array([50])]

# 拆分numpy数组为多列
split_array_cols = pd.DataFrame(df['Nums_Array'].tolist())
split_array_cols.columns = ['Col1', 'Col2']

# 合并到原DataFrame
df = pd.concat([df, split_array_cols], axis=1)

以上就是针对你需求的全部解决方案啦,根据自己的实际数据类型选对应的方法就行~

内容的提问来源于stack exchange,提问作者Rahul Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:31:10