Python 指定列上的Numpy sum

Python 指定列上的Numpy sum,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有这样一个数据帧: Name A B C D E Date 2000-10-19 Pete 1 0 1 1 0 2000-10-20 Joan 1 1 0 0

我有这样一个数据帧:

              Name     A       B       C        D       E 
Date                                                              
2000-10-19    Pete     1       0       1        1       0
2000-10-20    Joan     1       1       0        0       1     
2000-10-23    Michael  0       0       1        0       1 
2000-10-24    Carl     0       1       1        1       1
2000-10-25    Levis    1       0       1        1       0
2000-10-26    Susan    0       0       0        1       1 
我想计算每一行的1,它是这样的:

              Name     A       B       C        D       E      F
Date                                                              
2000-10-19    Pete     1       0       1        1       0      3
2000-10-20    Joan     1       1       0        0       1      3
2000-10-23    Michael  0       0       1        0       1      2
2000-10-24    Carl     0       1       1        1       1      4
2000-10-25    Levis    1       0       1        1       0      3
2000-10-26    Susan    0       0       0        1       1      2
我认为这很容易做到,但很简单,但我不太明白怎么做

但是我想到了这个,现在我只需要指定它要在哪些列上求和

df['E'] = np.sum(df, axis=1)

有人能帮忙吗?你可以总结一下:

df['F'] = np.sum(df[['A', 'B', 'C', 'D', 'E']], axis=1)

通过使用df['A','B','C','D','E']],您可以选择A,B,…,E列的子集。然后我们使用它来总结。通过指定axis=1参数,我们对每行求和,然后将这些行的和分配给新的列F。

您可以用以下公式求和:

df['F'] = np.sum(df[['A', 'B', 'C', 'D', 'E']], axis=1)
通过使用df['A','B','C','D','E']],您可以选择A,B,…,E列的子集。然后我们使用它来总结。通过指定axis=1参数,我们对每行求和,然后将这些行的和分配给新的列F。

,或者您也可以使用:

final=df.assign(F=df.drop('Name',1).sum(1))
或者,您也可以使用:

final=df.assign(F=df.drop('Name',1).sum(1))
我们还可以做到:

df['F']=df[df.eq(1)].count(axis=1)
print(df)

               Name  A  B  C  D  E  F
Date                                 
2000-10-19     Pete  1  0  1  1  0  3
2000-10-20     Joan  1  1  0  0  1  3
2000-10-23  Michael  0  0  1  0  1  2
2000-10-24     Carl  0  1  1  1  1  4
2000-10-25    Levis  1  0  1  1  0  3
2000-10-26    Susan  0  0  0  1  1  2

我们还可以做到:

df['F']=df[df.eq(1)].count(axis=1)
print(df)

               Name  A  B  C  D  E  F
Date                                 
2000-10-19     Pete  1  0  1  1  0  3
2000-10-20     Joan  1  1  0  0  1  3
2000-10-23  Michael  0  0  1  0  1  2
2000-10-24     Carl  0  1  1  1  1  4
2000-10-25    Levis  1  0  1  1  0  3
2000-10-26    Susan  0  0  0  1  1  2


当您喜欢使用熊猫数据帧时,可以使用:

import pandas as pd

df = pd.DataFrame([['John',0,1,0,0,1,0,1],
                   ['Kate',0,0,1,0,0,0,0],
                   ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])

df['SUM'] = df.sum(axis=1)
import pandas as pd
import numpy as np

df = pd.DataFrame([['John',0,1,0,0,1,0,1], ['Kate',0,0,1,0,0,0,0], ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
arr = df.values
totals = arr[:, 1:].sum(axis=1).reshape(-1,1)

np.hstack((arr, totals))
结果:

   Name  A  B  C  D  E  F  G  SUM
0  John  0  1  0  0  1  0  1    3
1  Kate  0  0  1  0  0  0  0    1
2  Pete  1  1  1  0  1  0  1    5
array([['John', 0, 1, 0, 0, 1, 0, 1, 3],
       ['Kate', 0, 0, 1, 0, 0, 0, 0, 1],
       ['Pete', 1, 1, 1, 0, 1, 0, 1, 5]], dtype=object)
当您喜欢使用numpy阵列时,可以使用:

import pandas as pd

df = pd.DataFrame([['John',0,1,0,0,1,0,1],
                   ['Kate',0,0,1,0,0,0,0],
                   ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])

df['SUM'] = df.sum(axis=1)
import pandas as pd
import numpy as np

df = pd.DataFrame([['John',0,1,0,0,1,0,1], ['Kate',0,0,1,0,0,0,0], ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
arr = df.values
totals = arr[:, 1:].sum(axis=1).reshape(-1,1)

np.hstack((arr, totals))
结果:

   Name  A  B  C  D  E  F  G  SUM
0  John  0  1  0  0  1  0  1    3
1  Kate  0  0  1  0  0  0  0    1
2  Pete  1  1  1  0  1  0  1    5
array([['John', 0, 1, 0, 0, 1, 0, 1, 3],
       ['Kate', 0, 0, 1, 0, 0, 0, 0, 1],
       ['Pete', 1, 1, 1, 0, 1, 0, 1, 5]], dtype=object)

当您喜欢使用熊猫数据帧时,可以使用:

import pandas as pd

df = pd.DataFrame([['John',0,1,0,0,1,0,1],
                   ['Kate',0,0,1,0,0,0,0],
                   ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])

df['SUM'] = df.sum(axis=1)
import pandas as pd
import numpy as np

df = pd.DataFrame([['John',0,1,0,0,1,0,1], ['Kate',0,0,1,0,0,0,0], ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
arr = df.values
totals = arr[:, 1:].sum(axis=1).reshape(-1,1)

np.hstack((arr, totals))
结果:

   Name  A  B  C  D  E  F  G  SUM
0  John  0  1  0  0  1  0  1    3
1  Kate  0  0  1  0  0  0  0    1
2  Pete  1  1  1  0  1  0  1    5
array([['John', 0, 1, 0, 0, 1, 0, 1, 3],
       ['Kate', 0, 0, 1, 0, 0, 0, 0, 1],
       ['Pete', 1, 1, 1, 0, 1, 0, 1, 5]], dtype=object)
当您喜欢使用numpy阵列时,可以使用:

import pandas as pd

df = pd.DataFrame([['John',0,1,0,0,1,0,1],
                   ['Kate',0,0,1,0,0,0,0],
                   ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])

df['SUM'] = df.sum(axis=1)
import pandas as pd
import numpy as np

df = pd.DataFrame([['John',0,1,0,0,1,0,1], ['Kate',0,0,1,0,0,0,0], ['Pete',1,1,1,0,1,0,1],],
                  columns=['Name', 'A', 'B', 'C', 'D', 'E', 'F', 'G'])
arr = df.values
totals = arr[:, 1:].sum(axis=1).reshape(-1,1)

np.hstack((arr, totals))
结果:

   Name  A  B  C  D  E  F  G  SUM
0  John  0  1  0  0  1  0  1    3
1  Kate  0  0  1  0  0  0  0    1
2  Pete  1  1  1  0  1  0  1    5
array([['John', 0, 1, 0, 0, 1, 0, 1, 3],
       ['Kate', 0, 0, 1, 0, 0, 0, 0, 1],
       ['Pete', 1, 1, 1, 0, 1, 0, 1, 5]], dtype=object)

嗨,这是一个非常有趣的问题-请你解释一下这个代码-我很好奇发生了什么。特别是在axis=1&np.sum为了简化这个问题,我可能删除了一些数据框,我没有提到的是,我还有很多其他列包含数字,但它们不能在计算器中求和,我尝试了第一个Willem Van Onsem解决方案,但是我在第一行10110.0和第二行11001.0中得到一个这样的总数,如此类推,怎么可能呢be@jhjorsal:你确定你的列不是字符串吗?对不起,是的,我错了-我想现在是睡觉时间:-嗨,这是一个非常有趣的问题-请你解释一下这个代码-我很好奇发生了什么。特别是在axis=1&np.sum为了简化这个问题,我可能删除了一些数据框,我没有提到的是,我还有很多其他列包含数字,但它们不能在计算器中求和,我尝试了第一个Willem Van Onsem解决方案,但是我在第一行10110.0和第二行11001.0中得到一个这样的总数,如此类推,怎么可能呢be@jhjorsal:你确定你的列不是字符串吗?对不起,是的,我错了-我想现在是睡觉时间:-这不是重复的吗:不完全是,但我可能也没有正确地描述这个问题。为了简化这个问题,我可能删除了一些数据框,我没有提到的是,我还有很多其他列包含数字,但它们不能在计算器中求和,我没有找到解决方案是的,这不是重复的:不完全,但我可能也没有正确描述这个问题。为了简化问题,我可能删除了一些数据框,我没有提到的是,我还有很多其他列包含数字,但它们不能在计算器中求和,因为我还没有找到解决方案