Вычтите подмножество столбцов из ключевого столбца в Pandas Pivot - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть сводная таблица с несколькими столбцами данных во временном ряду:

             A    B    C    D
11/1/2018    1    5    5    7
11/2/2018    2    6    6    8
11/3/2018    3    7    7    9

Значения в столбцах данных не важны для этого примера. Я хотел бы вычесть значение в столбце «ключ» (в данном случае столбец A) из подмножества столбцов: в данном случае B & C. Затем я хотел бы удалить любые столбцы, не входящие в подмножество или ключевой столбец . Результат будет:

             A    B    C
11/1/2018    1    4    4
11/2/2018    2    4    4
11/3/2018    3    4    4

В прошлом я вычитал столбцы с помощью такого кода:

df['dif'] = df['B'] -df['A']

Но это добавит столбец "dif". Я хотел бы заменить столбец B значениями B-A. Кроме того, вместо того, чтобы передавать инструкции по одной (B-A, C-A), хотелось бы передать список что-то вроде «если столбец в списке, вычесть ключевой столбец, иначе удалить столбец».

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

pandas.DataFrame.sub с axis=0

При вычитании Series из DataFrame Панды выровняют столбцы DataFrame с index из Series по умолчанию. Это то, что происходит, когда вы используете оператор -. Однако, когда вы используете метод pandas.DataFrame.sub, вы можете переопределить это значение по умолчанию и указать, что DataFrame должен выровнять свой индекс с индексом Series.

def f(d, key, subset):
  return d[[key]].join(d[subset].sub(d[key], axis=0))

f(df, 'A', ['B', 'C'])

           A  B  C
11/1/2018  1  4  4
11/2/2018  2  4  4
11/3/2018  3  4  4
0 голосов
/ 07 ноября 2018

Вы можете использовать apply, чтобы вычесть A из выбранных вами столбцов подмножеств и, наконец, join снова с A.

df['A'].to_frame().join(df[['B','C']].apply(lambda x: x - df['A']))

            A   B   C
11/1/2018   1   4   4
11/2/2018   2   4   4
11/3/2018   3   4   4
...