亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號