如何将DataFrame行数据转列并合并至指定结构的空DataFrame?
如何将DataFrame中的统计数据提取插入到目标空DataFrame中
问题场景
我有两个DataFrame:第一个包含某产品的统计数据,第二个是创建的空DataFrame。需要将第一个DataFrame中的数据提取并插入到第二个DataFrame中,目前仅掌握按行或列拼接数据的方法,该如何实现?
代码示例
product = 'PRDQM0011122TR131' prod_results = pm.summary(trace_dict_prodlevel[product]) prod_results
prod_results的结构:
| mean | sd | |
|---|---|---|
| Slope | -0.012 | -0.012 |
| Intercept | 0.906 | 0.356 |
prod_results1 = pd.DataFrame(columns = ['product', 'slope_mean', 'slope_sd', 'int_mean', 'int_sd']) prod_results1
prod_results1的初始结构:
| product | slope_mean | slope_sd | int_mean | int_sd |
|---|
期望输出
| product | slope_mean | slope_sd | int_mean | int_sd |
|---|---|---|---|---|
| PRDQM0011122TR131 | -0.012 | -0.012 | 0.906 | 0.356 |
解决方案
方法1:用pd.concat拼接单行DataFrame(符合你熟悉的拼接逻辑)
先从源DataFrame提取数据,构造出包含目标行的单行DataFrame,再用concat按行拼接到空DataFrame中:
# 提取源数据中的统计值 slope_mean = prod_results.loc['Slope', 'mean'] slope_sd = prod_results.loc['Slope', 'sd'] int_mean = prod_results.loc['Intercept', 'mean'] int_sd = prod_results.loc['Intercept', 'sd'] # 构造单行DataFrame new_row_df = pd.DataFrame({ 'product': [product], 'slope_mean': [slope_mean], 'slope_sd': [slope_sd], 'int_mean': [int_mean], 'int_sd': [int_sd] }) # 按行拼接两个DataFrame prod_results1 = pd.concat([prod_results1, new_row_df], ignore_index=True)
方法2:用append插入字典行
通过字典构造行数据,直接追加到空DataFrame中(注意:append在pandas 2.0+版本已被标记为弃用,但仍可使用):
new_row = { 'product': product, 'slope_mean': prod_results.loc['Slope', 'mean'], 'slope_sd': prod_results.loc['Slope', 'sd'], 'int_mean': prod_results.loc['Intercept', 'mean'], 'int_sd': prod_results.loc['Intercept', 'sd'] } prod_results1 = prod_results1.append(new_row, ignore_index=True)
方法3:直接用loc赋值
直接定位空DataFrame的行位置,赋值对应数据:
prod_results1.loc[0] = [ product, prod_results.loc['Slope', 'mean'], prod_results.loc['Slope', 'sd'], prod_results.loc['Intercept', 'mean'], prod_results.loc['Intercept', 'sd'] ]
内容的提问来源于stack exchange,提问作者bismah ghafoor
相关产品推荐
相关产品推荐

