如何用Pandas根据原列表正负值条件生成目标DataFrame
完整实现方案
嘿,你已经完成了前期的准备工作,剩下的填充步骤其实很简单,只需要根据原数据的正负性,用loc方法给finalDataFrame的对应位置赋值就行啦。我帮你把完整的代码整理出来,还修正了一点点小细节:
import pandas as pd # 原始列表 orig = [2, 3, 4, -5, -6, -7] # 转换为DataFrame raw = pd.DataFrame(orig, columns=['raw']) # 计算正值总和(明确指定列,确保得到单个数值而非Series) sum_pos = raw[raw['raw'] > 0]['raw'].sum() # 计算负值绝对值总和 sum_neg = -raw[raw['raw'] < 0]['raw'].sum() # 创建空的final DataFrame final = pd.DataFrame(index=raw.index, columns=['final']) # 根据正负条件填充对应总和 final.loc[raw['raw'] > 0, 'final'] = sum_pos final.loc[raw['raw'] < 0, 'final'] = sum_neg # 查看结果 print(final['final'].tolist()) # 输出: [9, 9, 9, 18, 18, 18]
小细节说明:
- 计算
sum_pos和sum_neg时,特意指定了['raw']列,这样得到的是单个整数,而非Pandas的Series对象,避免后续赋值时可能出现的匹配问题。 - 使用
loc可以精准定位到满足条件的行,直接赋值对应的总和,逻辑清晰又高效。
如果你想更简洁一点,其实可以跳过创建空DataFrame的步骤,直接用np.where生成结果列:
import pandas as pd import numpy as np orig = [2, 3, 4, -5, -6, -7] raw = pd.DataFrame(orig, columns=['raw']) sum_pos = raw[raw['raw'] > 0]['raw'].sum() sum_neg = -raw[raw['raw'] < 0]['raw'].sum() # 直接生成final列 raw['final'] = np.where(raw['raw'] > 0, sum_pos, sum_neg) print(raw['final'].tolist()) # 同样得到[9, 9, 9, 18, 18, 18]
两种方式都能达到你想要的效果,看你习惯哪种写法啦~
内容的提问来源于stack exchange,提问作者dayum
相关产品推荐
相关产品推荐

