Python 基于数据帧中的两列组合单元格值
我正在学习使用python和pandas,我想知道如何根据两列中的单元格值组合来自不同行的内容。 在本例中,我希望合并来自同一部门和同一id内的分数 这是我拥有的DF的简化版本:Python 基于数据帧中的两列组合单元格值,python,pandas,Python,Pandas,我正在学习使用python和pandas,我想知道如何根据两列中的单元格值组合来自不同行的内容。 在本例中,我希望合并来自同一部门和同一id内的分数 这是我拥有的DF的简化版本: id department name scoreA abc sales eric 2 abc sales jack 3 abc marketing sofia 6 abc marketing anna 7 zzz
id department name scoreA
abc sales eric 2
abc sales jack 3
abc marketing sofia 6
abc marketing anna 7
zzz sales jack 1
zzz sales eric 8
zzz marketing sofia 11
zzz marketing anna 1
这就是我想要的DF:
id department totalScoreA
abc sales 5
abc marketing 13
zzz sales 9
zzz marketing 12
id department totalScoreA AverageScore((A+B*2)/2)
abc sales 5 18.5
abc marketing 13 24.5
zzz sales 10 25
zzz marketing 12 20
我还有一个跟进问题。如果计数有两列,我想要这些计数的平均值,但在平均这些值之前,我想将分数乘以2。像这样:
id department name scoreA scoreB
abc sales eric 2 10
abc sales jack 3 6
abc marketing sofia 6 8
abc marketing anna 7 10
zzz sales eric 8 10
zzz sales jack 2 10
zzz marketing sofia 11 4
zzz marketing anna 1 10
这就是我想要的DF:
id department totalScoreA
abc sales 5
abc marketing 13
zzz sales 9
zzz marketing 12
id department totalScoreA AverageScore((A+B*2)/2)
abc sales 5 18.5
abc marketing 13 24.5
zzz sales 10 25
zzz marketing 12 20
更新:
嘿,非常感谢你的回答@jezrael!第一个工作,因为它应该
然而,对于第二个问题的定义,我可能有点太模糊了。我想要的是得到每个部门每个小组的所有得分的综合平均值*2。我举一个有价值观的例子来说明这一点:
由此:
id department name scoreA scoreB
zzz marketing sofia 5 4
zzz marketing anna 2
为此:
平均值为5+2+4*2/3。数字3来自数值的计数。因此,即使在您以前的解决方案的帮助下,我也无法计算出该值:/
id department meanA meanB meanAB
zzz marketing 3.5 4 5
首先是加总,包括:
第二个是第一个多列scoreB,添加了scoreA并与聚合函数字典一起使用,这里是sum和mean:
编辑:
详情:
首先是加总,包括:
第二个是第一个多列scoreB,添加了scoreA并与聚合函数字典一起使用,这里是sum和mean:
编辑:
详情:
我回复了你的评论,在原来的问题上添加了更多的内容,我想添加更多的代码。不知道如何在那里标记你:/i我回复了你的评论,在原始版本中添加了更多内容,我想添加更多代码。我不知道我怎么能在那里标记你:/
print (df)
id department name scoreA scoreB
0 abc sales eric 2 10.0
1 abc sales jack 3 6.0
2 abc marketing sofia 6 8.0
3 abc marketing anna 7 10.0
4 abc marketing eric 8 10.0 <-changed data
5 zzz sales jack 2 10.0
6 zzz marketing sofia 5 4.0 <-changed data
7 zzz marketing anna 2 NaN <-changed data
df2 = (df.assign(scoreB = df['scoreB'].mul(2).add(df['scoreA'], fill_value=0),
Count = df[['scoreA','scoreB']].count(1))
.groupby(['id', 'department'], as_index=False, sort=False)
.sum())
print (df2)
id department scoreA scoreB Count
0 abc sales 5 37.0 4
1 abc marketing 21 77.0 6
2 zzz sales 2 22.0 2
3 zzz marketing 7 15.0 3
df2['scoreB'] /= df2.pop('Count')
print (df2)
id department scoreA scoreB
0 abc sales 5 9.250000
1 abc marketing 21 12.833333
2 zzz sales 2 11.000000
3 zzz marketing 7 5.000000
print (df.assign(scoreB = df['scoreB'].mul(2).add(df['scoreA'], fill_value=0),
Count = df[['scoreA','scoreB']].count(1)))
id department name scoreA scoreB Count
0 abc sales eric 2 22.0 2
1 abc sales jack 3 15.0 2
2 abc marketing sofia 6 22.0 2
3 abc marketing anna 7 27.0 2
4 abc marketing eric 8 28.0 2
5 zzz sales jack 2 22.0 2
6 zzz marketing sofia 5 13.0 2
7 zzz marketing anna 2 2.0 1