为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中转换 R 函数

在 Python 中转换 R 函数

jeck猫 2023-05-23 14:42:06
我有两个变量,由数据框中的数据组成x = table_1[' Profit ']y = table_1['diff_date']其中 x 是0      820.01      306.02      139.03      105.04      140.05      149.06       96.07       80.08      124.09      102.010      72.011      54.012      66.013     124.014      64.015      93.016      58.017      59.018      62.019      65.020      74.021      67.022      80.023      91.024      81.025      56.026      43.0y 是0       01       12       23       34       45       56       67       78       89       910     1011     1112     1213     1314     1415     1516     1617     1718     1819     1920     2021     2122     2223     2324     2425     2526     26我在 R 中有一个函数,我试图在 Python 中转换它,除了 R 中的小条件外,我已经完成了大部分任务。R中的函数是my_sum <- function(x, y){  a <- NULL  for (i in 1:max(y)) {    a[i] <- sum(x[which(y == (i-1))])  }  a[1] <- a[1] - 7000   a[2] <- a[2] + 900   return(cumsum(a)) } 我想在 Python 中转换这个函数,到目前为止我所做的是 def my_sum(x,y):    a = 0    for i in range (1,max(y)):       a[i] = sum(x[np.where (y == (i-1))])                    a[1] = a[1] - 7000    a[2] = a[2] + 900    return(np.cumsum(a))我不确定的是如何转换sum(x[which(y == (i-1))])为 Python,我已经读过我们可以使用np.where并且我尝试将它转换为类似的东西sum(x[np.where (y == (i-1))])但是它抛出了错误ValueError:只能使用 MultiIndex 进行元组索引不确定我的代码中的问题在哪里
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

a使用前需要定义:


import numpy as np


x = np.array([820.0, 306.0, 139.0, 105.0, 140.0])

y = np.arange(len(x))


def my_sum(x,y):

    a = np.zeros((len(y),))

    for i in range (1,max(y)):

       a[i] = sum(x[np.where(y == (i-1))])

                

    a[1] = a[1] - 7000

    a[2] = a[2] + 900

    return(np.cumsum(a))


s = my_sum(x,y)


查看完整回答
反对 回复 2023-05-23
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

我不太确定你想要完成什么,虽然看起来你正在做一个分组总和:


在 R 中你可以这样做:


my_sum1 <- function(x, y){

  a <- unname(tapply(x, y, sum))

  a[1:2] <- a[1:2] + c(-7000, 900)

  cumsum(a)

}

在 python 中你可以这样做:


import numpy as np

def my_sum1(x,y):

    a = np.array([(x[y == i]).sum() for i in np.unique(y)])

    a[0:2] = a[0:2] + np.r_[-7000, 900]

    return a.cumsum()


查看完整回答
反对 回复 2023-05-23
?
呼唤远方

TA贡献1856条经验 获得超11个赞

def my_sum(x,y):
    a = [sum(x[np.where(y == (i-1))]) for i in range(1,max(y))]
                
    a[1] -= 7000
    a[2] += 900
    return(np.cumsum(a))


查看完整回答
反对 回复 2023-05-23
  • 3 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信