我有一个如下数据框:
raw_data = {
'age': [20, 20, 20, 22, 21],
'favorite_color': ['blue', 'blue', 'blue','yellow', "green"],
'grade': [92,"" , 92, 95, 70],
'key': ['a', 'b', 'Total', 'a', 'b']}
df = pd.DataFrame(raw_data)
df
age favorite_color grade key
20 blue 92 a
20 blue b
20 blue 92 Total
22 yellow 95 a
21 green 70 b
对于“ age”和“ favorite_color”相等的值 如果“键”的“总”值的“等级” =非“键”的总值的“等级”之和, 将“总计”的等级替换为0。
所以我的输出数据帧应如下图所示:
age favorite_color grade key
20 blue 92 a
20 blue b
20 blue 0 Total
22 yellow 95 a
21 green 70 b
答案 0 :(得分:0)
这是我的解决方案:
首先将非空白成绩转换为整数:
df.grade = df.grade.astype(int, errors='ignore')
使函数检查非总计=总计
def fixer(x):
if x[x.key == 'Total']['grade'].sum() == x[x.key == 'Total']['grade'].sum():
x.loc[x.key == 'Total', 'grade'] = 0
return x
利润!
df[df.grade.apply(lambda x: isinstance(x, int))].groupby(
['age', 'favorite_color']).apply(fixer)
age favorite_color grade key
0 20 blue 92 a
2 20 blue 0 Total
3 22 yellow 95 a
4 21 green 70 b