Вычитание двух столбцов в пандах со списками для создания столбца cummalative

Dataframe состоит из набора x, который является универсальным множеством и столбцом подмножества содержит некоторые подмножества. Я хочу выбрать подмножества с максимальными коэффициентами, пока не накрою полный набор x.

Uncovered = setx - подмножество

Вот как выглядит мой фреймворк в пандах:

   ratio                  set x        subset        uncovered
2   2.00  [1, 3, 6, 8, 9, 0, 7]  [8, 3, 6, 1]        [0, 9, 7]
0   1.50  [1, 3, 6, 8, 9, 0, 7]     [1, 3, 6]     [0, 8, 9, 7]
1   1.00  [1, 3, 6, 8, 9, 0, 7]        [9, 0]  [8, 1, 3, 6, 7]
3   0.75  [1, 3, 6, 8, 9, 0, 7]     [1, 3, 7]     [0, 8, 6, 9]

Я хочу создать еще один столбец с вычитанием набора x с накопленным непокрытым столбцом, пока не получу пустой список.

Я попробовал код ниже

p['tt']=list(p['set x']-p['subset'])

Сообщение об ошибке :

-------------------------------------------------- ------------------------- TypeError Traceback (последний последний звонок) /Applications/anaconda/lib/python3.5/site-packages/pandas/ core / ops.py в na_op (x, y) 581 result = expressions.evaluate (op, str_rep, x, y, -> 582 raise_on_error = True, ** eval_kwargs) 583 кроме TypeError:

/Applications/anaconda/lib/python3.5/site-packages/pandas/comput/expressions.py в оценке (op, op_str, a, b, raise_on_error, use_numexpr, ** eval_kwargs) 208 return _evaluate (op, op_str, a , b, raise_on_error = raise_on_error, -> 209 ** eval_kwargs) 210 return _evaluate_standard (op, op_str, a, b, raise_on_error = raise_on_error)

/Applications/anaconda/lib/python3.5/site-packages/pandas/comput/expressions.py в _evaluate_numexpr (op, op_str, a, b, raise_on_error, truediv, reverseed, ** eval_kwargs) 119, если результатом является None: -> 120 result = _evaluate_standard (op, op_str, a, b, raise_on_error) 121

/Applications/anaconda/lib/python3.5/site-packages/pandas/comput/expressions.py в _evaluate_standard (op, op_str, a, b, raise_on_error, ** eval_kwargs) 61 _store_test_result (False) ---> 62 return op (a, b) 63

TypeError: неподдерживаемый тип операндов для -: 'list' и 'list'

Во время обработки вышеуказанного исключения произошло другое исключение:

TypeError Traceback (последний последний вызов) в () ----> 1 p ['tt'] = list (p ['set x'] - p ['subset'])

/Applications/anaconda/lib/python3.5/site-packages/pandas/core/ops.py в оболочке (слева, справа, имя, na_op) 639 rvalues ??= algos.take_1d (rvalues, ridx) 640 -> 641 arr = na_op (lvalues, rvalues) 642 643 return left._constructor (wrap_results (arr), index = index,

/Applications/anaconda/lib/python3.5/site-packages/pandas/core/ops.py в na_op (x, y) 586 result = np.empty (x.size, dtype = dtype) 587 mask = notnull (x ) & notnull (y) -> 588 result [mask] = op (x [mask], _values_from_object (y [mask])) 589 elif isinstance (x, np.ndarray): 590 result = np.empty (len ( x), dtype = x.dtype)

TypeError: неподдерживаемый тип операндов для -: 'list' и 'list'

python,pandas,

0

Ответов: 1


0 принят

Это должно сработать для вас:

import pandas as pd

#    ratio                  set x        subset        uncovered
# 2   2.00  [1, 3, 6, 8, 9, 0, 7]  [8, 3, 6, 1]        [0, 9, 7]
# 0   1.50  [1, 3, 6, 8, 9, 0, 7]     [1, 3, 6]     [0, 8, 9, 7]
# 1   1.00  [1, 3, 6, 8, 9, 0, 7]        [9, 0]  [8, 1, 3, 6, 7]
# 3   0.75  [1, 3, 6, 8, 9, 0, 7]     [1, 3, 7]     [0, 8, 6, 9]

p = pd.DataFrame(
    [
        {'set x': [1, 3, 6, 8, 9, 0, 7], 'subset': [1, 3, 6]},
        {'set x': [1, 3, 6, 8, 9, 0, 7], 'subset': [9, 0]},
        {'set x': [1, 3, 6, 8, 9, 0, 7], 'subset': [8, 3, 6, 1]},
        {'set x': [1, 3, 6, 8, 9, 0, 7], 'subset': [1, 3, 7]},
    ])


def set_operation(x):
    return list(set(x['set x']) - set(x['subset']))

p['tt'] = p.apply(set_operation, axis=1)

Результат:

                   set x        subset               tt
0  [1, 3, 6, 8, 9, 0, 7]     [1, 3, 6]     [0, 8, 9, 7]
1  [1, 3, 6, 8, 9, 0, 7]        [9, 0]  [8, 1, 3, 6, 7]
2  [1, 3, 6, 8, 9, 0, 7]  [8, 3, 6, 1]        [0, 9, 7]
3  [1, 3, 6, 8, 9, 0, 7]     [1, 3, 7]     [0, 8, 9, 6]
питон, панды,
Похожие вопросы