【发布时间】:2020-10-10 05:51:19
【问题描述】:
我需要用来自“A”、“B”和“C”列的相同值组合来总结每一行的“D”列的值。最终我需要创建具有唯一值组合的 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”列值。例如下面的行返回 'A'=0,'B'=2,'C'=2 的 'D' 列的值的总和:
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 并保存在 temp 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 问题或者我可以应用什么其他方法来解决原始问题 有问题吗?
【问题讨论】:
-
在前三列的组合上使用
groupby。
标签: python pandas dataframe apply nan