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:你确定你的列不是字符串吗?对不起,是的,我错了-我想现在是睡觉时间:-这不是重复的吗:不完全是,但我可能也没有正确地描述这个问题。为了简化这个问题,我可能删除了一些数据框,我没有提到的是,我还有很多其他列包含数字,但它们不能在计算器中求和,我没有找到解决方案是的,这不是重复的:不完全,但我可能也没有正确描述这个问题。为了简化问题,我可能删除了一些数据框,我没有提到的是,我还有很多其他列包含数字,但它们不能在计算器中求和,因为我还没有找到解决方案