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

如何为DataFrame指定索引选择性应用computeLeft函数

解决方案

场景1:指定行的位置索引(从0开始的序号)

如果[2, 5, 7, 8, 10]是DataFrame的行位置(比如第3行、第6行的位置序号),可以按以下步骤实现:

  1. 先初始化结果列为NaN:
import numpy as np
import pandas as pd

results = ["val1", "val2", "val3", "val4"]
# 给所有行的结果列赋初始值NaN
df[results] = np.nan
  1. 针对指定位置计算并赋值:
target_positions = [2, 5, 7, 8, 10]
# 对指定位置的索引调用computeLeft
computed_values = np.vectorize(computeLeft, signature="()->(4)")(target_positions)
# 将计算结果赋值到对应行
df.loc[df.index[target_positions], results] = computed_values

场景2:指定行的索引标签

如果[2, 5, 7, 8, 10]是DataFrame的实际索引标签(比如df的索引就是这类数值),分两种情况处理:

情况A:computeLeft接收的是行位置序号

需要先把索引标签转换成对应的行位置:

import numpy as np
import pandas as pd

results = ["val1", "val2", "val3", "val4"]
df[results] = np.nan

target_labels = [2, 5, 7, 8, 10]
# 获取标签对应的行位置
positions = df.index.get_indexer(target_labels)
# 计算对应值
computed_values = np.vectorize(computeLeft, signature="()->(4)")(positions)
# 赋值到对应标签的行
df.loc[target_labels, results] = computed_values

情况B:computeLeft接收的是索引标签(而非行位置)

直接用标签调用函数即可:

import numpy as np
import pandas as pd

results = ["val1", "val2", "val3", "val4"]
df[results] = np.nan

target_labels = [2, 5, 7, 8, 10]
computed_values = np.vectorize(computeLeft, signature="()->(4)")(target_labels)
df.loc[target_labels, results] = computed_values

注意事项

  • 用np.nan初始化会让结果列变为浮点类型,若需保留整数类型,可改用pd.NA(需pandas 1.0及以上版本)。
  • 上述方案延续了你原代码中np.vectorize的使用逻辑,确保计算逻辑和格式的一致性。

内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:42:36