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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:08:13