【问题标题】:Python: dynamic column sum for each rowPython:每行的动态列总和
【发布时间】:2019-02-13 05:07:08
【问题描述】:

我有一个数据框,其中包含 2 个标识符(ID1、ID2)和 3 个数字列(X1、X2、X3)和一个标题为“输入”的列(共 6 列)和 n 行。对于每一行,我想获取第 n 列的索引,使得 n 是最后一次 (x1+x2+xn... >=0) 仍然为真。

如何在 Python 中做到这一点?

在 R 中,我通过使用:

tmp = data


for (i in 4:5)

{

data[,i]<-  tmp$input - rowSums(tmp[,3:i])

}

output<-  apply((data[,3:5]), 1, function(x) max(which(x>0)))

data$output <-  output

我正在尝试将其翻译成 Python。最好的方法是什么?可以有 N 个这样的行,和 M 个这样的列。

样本数据:

ID1 ID2 X1  X2  X3  INPUT   OUTPUT  (explanation)       
a   b   1   2   3   3   2   (X1 = 1, x1+x2 = 3, x1+x3+x3 = 6 ... and after 2 sums, input< sums)     
a1  a2  5   2   1   4   0   (X1 = 5, x1+x2 = 7, x1+x3+x3 = 8 ... and even for 1 sum, input< sums)   
a2  b2  0   4   5   100 3   (X1=0, X1+X2=4, X1+X2+X3=9, ... even after 3 sums, input>sums)

【问题讨论】:

    标签: python python-3.x pandas numpy


    【解决方案1】:

    您可以使用 Python 中非常有效地处理此问题的 Pandas 模块。

    import pandas as pd
    #Taking a sample data here
    df = pd.DataFrame([
                  ['A','B',1,3,4,0.1],
                ['K','L',10,3,14,0.5],
                ['P','H',1,73,40,0.6]],columns = ['ID1','ID2','X2','X3','X4','INPUT'])
     #Below code does the functionality you would want.
    df['new_column']=df[['X2','X3','X4']].max(axis=1)
    

    【讨论】:

    • 嗨,吉姆,我认为这不是我想要的。如果您查看示例数据,输入列需要不同的值,例如它们是 5、10、100。对于第一行,如果输入 =5,则 [X2=1, X2+X3 = 4, X2+X3+x4 = 8]。在这种情况下,最大索引将是 3(X3),因为此后任何后续总和都会给出 sum>input。对于第二行,如果输入 = 10,X2=10,X2+X3=13,X2+X3+X4=27。这里输出 = 2 (X2) 在 X2 或第一列本身之后,如果有后续加法,总和总是大于 10(输入。)。这对某些上下文有帮助吗?
    • 你能在问题中打印你的输入和输出吗?那会很棒。
    猜你喜欢
    • 2022-12-03
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多