Python:每行的动态列总和

Python:每行的动态列总和,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我有一个包含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]),

我有一个包含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
tmp=数据
(我在4:5中)
{

data[,i]您可以使用Pandas模块,它在Python中非常有效地处理这个问题

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。对于第二行,如果input=10,X2=10,X2+X3=13,X2+X3+X4=27。这里,X2之后的输出=2(X2)或第一列本身,如果有后续的加法,总和总是大于10(input).这对上下文有帮助吗?你能在问题中打印你的输入和输出吗?那太好了。
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)