2017-01-16 9 views
1

Так что мои данные, в панде, выглядит следующим образом:Python Панда: выбрать несколько значений ячеек одного столбца, основываясь на значении другого столбца

values variables 
134  1 
12  2 
43  1 
54  3 
16  2 

И я хочу, чтобы создать новый столбец, который является суммой values всякий раз, когда остаток variables не равен переменной текущей строки в variables. Например, для первой строки я хотел бы суммировать все строки values, где variables != 1. Результат будет выглядеть следующим образом:

values variables result 
    134  1  82 
    12  2  231 
    43  1  82 
    54  3  205 
    16  2  231 

Я попробовал пару вещей, как перечислить, но я не могу показаться, чтобы получить хорошую ручку на этом. Благодаря!

ответ

3

Вместо того чтобы найти сумму всех значений, которые не равны текущей переменной, может равноценно вычесть сумму всех значений, которые равны текущей переменной от общей суммы без каких-либо фильтров:

df['result'] = df['values'].sum() 
df['result'] -= df.groupby('variables')['values'].transform('sum') 

Или в одной строке, если вы хотите быть лаконична:

df['result'] = df['values'].sum() - df.groupby('variables')['values'].transform('sum') 

Полученный выход:

values variables result 
0  134   1  82 
1  12   2  231 
2  43   1  82 
3  54   3  205 
4  16   2  231