基于相等数据行为pandas数据框中的某些列过滤数据

时间:2019-01-31 16:06:39

标签: pandas dataframe

我有一个如下数据框:

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

1 个答案:

答案 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