Как вычесть значение столбца с каждым значением в другом столбце (pandas) - PullRequest
2 голосов
/ 12 марта 2020

У меня есть два столбца A и B. Я хочу вычесть значение столбца B из каждого значения в столбце A и создать новый столбец без использования for-l oop.

Ниже приведен мой Dataframe

    A   B
0   5   3
1   3   2
2   8   1

Желаемый выход

    A   B   C   D   E
0   5   3   2   3   4   
1   3   2   0   1   2
2   8   1   5   6   7

C = A - B[0]
D = A - B[1]
E = A - B[2]

Ответы [ 3 ]

3 голосов
/ 12 марта 2020

Использование массива numpy широковещание :

df = pd.DataFrame({'A':[5, 3, 8],
                   'B':[3, 2, 1]})

df2 = pd.DataFrame(df['A'].values[:, None] - df['B'].values, columns=['C', 'D', 'E'])

df = df.join(df2)

Результат:

   A  B  C  D  E
0  5  3  2  3  4
1  3  2  0  1  2
2  8  1  5  6  7

Объяснение :

>>> df['A'].values[:, None]

array([[5],
       [3],
       [8]])

>>> df['B'].values

array([3, 2, 1])

При их вычитании numpy "растягивается" df['A'].values[:, None] до:

array([[5, 5, 5],
       [3, 3, 3],
       [8, 8, 8]])

и df['B'].values до:

array([[3, 2, 1],
       [3, 2, 1],
       [3, 2, 1]])

и результат вычитания равен :

array([[2, 3, 4],
       [0, 1, 2],
       [5, 6, 7]])
0 голосов
/ 12 марта 2020

Это может помочь:
1. реплицировать столбец A в соответствии с длиной кадра данных
2. преобразовать B в numpy массив
3. Вычесть B из A, что должно получить вычитание в строке
4. обратно к основным данным

temp = pd.concat([df.A]*len(df), axis=1).sub(df.B.to_numpy())
final = pd.concat([df,temp], axis=1).set_axis(['A','B','C','D','E'],axis='columns')
final

    A   B   C   D   E
0   5   3   2   3   4
1   3   2   0   1   2
2   8   1   5   6   7
0 голосов
/ 12 марта 2020

Здесь вы go:

d = pd.DataFrame.from_dict({'A': {0: 5, 1: 3, 2: 8}, 'B': {0: 3, 1: 2, 2: 1}})
m = d.shape[0]
cols = [chr(67 + x) for x in range(m)]
d.join(pd.DataFrame(np.broadcast_to(d['A'], (m, m)).T - np.broadcast_to(d['B'], (m, m)), columns=cols))

Объяснение: передайте каждую серию в матрицу 3х3 и вычтите их, превратите в кадр данных и соедините с оригиналом. Столбцы генерируются автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...