如何使用来自 'A'、'B' 和 'C 列的相同值组合对每一行的 'D' 列的值求和?
How to sum up values of 'D' column for every row with the same combination of values from columns 'A','B' and 'C?
我需要 对每一行的 'D' 列的值求和,这些值具有来自列 'A'、'B' 和 'C[= 的相同值组合34=]。最终我需要创建具有独特值组合的DataFrame
'A'、'B' 和 'C' 列以及 D.
列中的相应总和
import numpy as np
df = pd.DataFrame(np.random.randint(0,3,size=(10,4)),columns=list('ABCD'))
df
OT:
A B C D
0 0 2 0 2
1 0 1 2 1
2 0 0 2 0
3 1 2 2 2
4 0 2 2 2
5 0 2 2 2
6 2 2 2 1
7 2 1 1 1
8 1 0 2 0
9 1 2 0 0
我尝试创建带有空单元格的临时数据框
D = pd.DataFrame([i for i in range(len(df))]).rename(columns = {0:'D'})
D['D'] = ''
D
OT:
D
0
1
2
3
4
5
6
7
8
9
并使用 apply() 对由列 'A'、'B' 和 'C' 组成的唯一行的所有 'D' 列值求和。例如下面的行 returns 来自 'D' 列的值总和 'A'=0,'B'=2,'C'=2:
df[(df['A']==0) & (df['B']==2) & (df['C']==2)]['D'].sum()
OT:
4
函数:
def Sumup(cols):
A = cols[0]
B = cols[1]
C = cols[2]
D = cols[3]
sum = df[(df['A']==A) & (df['B']==B) & (df['C']==C)]['D'].sum()
return sum
应用于 df 并保存在临时 df D['D']:
D['D'] = df[['A','B','C','D']].apply(Sumup)
后来我想使用 drop_duplicates 但我收到的数据帧由 NaN 组成。
D
OT:
D
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
任何人都可以给我提示如何处理 NaN 问题或我可以应用什么其他方法来解决原始问题
有问题吗?
import numpy as np
df = pd.DataFrame(np.random.randint(0,3,size=(10,4)),columns=list('ABCD'))
df.groupby(["A", "B", "C"])["D"].sum()
df.groupby(['A','B','C']).sum()
我需要 对每一行的 'D' 列的值求和,这些值具有来自列 'A'、'B' 和 'C[= 的相同值组合34=]。最终我需要创建具有独特值组合的DataFrame 'A'、'B' 和 'C' 列以及 D.
列中的相应总和import numpy as np
df = pd.DataFrame(np.random.randint(0,3,size=(10,4)),columns=list('ABCD'))
df
OT:
A B C D
0 0 2 0 2
1 0 1 2 1
2 0 0 2 0
3 1 2 2 2
4 0 2 2 2
5 0 2 2 2
6 2 2 2 1
7 2 1 1 1
8 1 0 2 0
9 1 2 0 0
我尝试创建带有空单元格的临时数据框
D = pd.DataFrame([i for i in range(len(df))]).rename(columns = {0:'D'})
D['D'] = ''
D
OT:
D
0
1
2
3
4
5
6
7
8
9
并使用 apply() 对由列 'A'、'B' 和 'C' 组成的唯一行的所有 'D' 列值求和。例如下面的行 returns 来自 'D' 列的值总和 'A'=0,'B'=2,'C'=2:
df[(df['A']==0) & (df['B']==2) & (df['C']==2)]['D'].sum()
OT:
4
函数:
def Sumup(cols):
A = cols[0]
B = cols[1]
C = cols[2]
D = cols[3]
sum = df[(df['A']==A) & (df['B']==B) & (df['C']==C)]['D'].sum()
return sum
应用于 df 并保存在临时 df D['D']:
D['D'] = df[['A','B','C','D']].apply(Sumup)
后来我想使用 drop_duplicates 但我收到的数据帧由 NaN 组成。
D
OT:
D
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
任何人都可以给我提示如何处理 NaN 问题或我可以应用什么其他方法来解决原始问题 有问题吗?
import numpy as np
df = pd.DataFrame(np.random.randint(0,3,size=(10,4)),columns=list('ABCD'))
df.groupby(["A", "B", "C"])["D"].sum()
df.groupby(['A','B','C']).sum()