如何将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']
运行后你会得到这样的结果:
| Id | Feature_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)
最终结果会是:
| Id | Feature_1 | Feature_2 |
|---|---|---|
| 1 | 10 | 20 |
| 2 | 30 | 40 |
| 3 | 50 | NaN |
(注:长度不足的位置会自动填充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
相关产品推荐
相关产品推荐

