如何将较长的NumPy数组适配到更宽但行数更少的Pandas DataFrame中
实现NumPy数组插入DataFrame并重复填充列的方案
没问题,我来帮你搞定这个需求!首先咱们先明确下原数据的细节:你定义的p其实默认把第一行当成了数据,所以第一步得先把它修正成你展示的带表头的结构,然后再处理数组b的插入和列填充。
步骤1:修正原DataFrame p的结构
你写的p创建代码会把["j","k","h"]当成第一行数据,所以我们需要先把这行设为列名,然后去掉这行数据:
import pandas as pd import numpy as np # 原定义 p = pd.DataFrame([["j","k","h"],[4,5,6],[7,8,9]]) # 修正表头 p.columns = p.iloc[0] p = p[1:]
修正后的p结构就和你展示的一致了:
j k h 1 4 5 6 2 7 8 9
步骤2:处理NumPy数组b并生成目标DataFrame
我们需要把b的第一列放到p的第一列(j列),然后把b的第二列重复填充到p剩下的所有列(k和h列)。这里有两种简洁的实现方式:
方法一:用NumPy的数组拼接
利用np.tile重复第二列,再和第一列拼接:
# 定义数组b b = np.array([["a",10],["b",20],["c",30],["d",40]]) # 提取b的第一列 first_col = b[:, 0] # 把b的第二列重复(p的列数-1)次,转置后和第一列拼接 repeat_cols = np.tile(b[:, 1], (p.shape[1]-1, 1)).T new_data = np.column_stack([first_col, repeat_cols]) # 创建目标DataFrame,用p的列名 result = pd.DataFrame(new_data, columns=p.columns)
方法二:用Pandas的字典构造
直接通过字典指定每一列的数据源,更直观:
# 把b转成临时DataFrame b_df = pd.DataFrame(b, columns=['col0', 'col1']) # 构造目标DataFrame:第一列用b的第一列,剩余列都用b的第二列 result = pd.DataFrame({ p.columns[0]: b_df['col0'], **{col: b_df['col1'] for col in p.columns[1:]} })
最终结果
运行任意一种方法后,result的结构就是你想要的:
j k h 0 a 10 10 1 b 20 20 2 c 30 30 3 d 40 40
内容的提问来源于stack exchange,提问作者Ray Li
相关产品推荐
相关产品推荐

