Добавление двух столбцов списков вместе как нового столбца в pandas фрейме данных - PullRequest
0 голосов
/ 10 февраля 2020

Я создал pandas фрейм данных, который содержит несколько столбцов, которые состоят из списков следующим образом:

   A   B    C   List_A     List_B
   10  10   5   [0, 5, 1]  [10, 12, 0]
   5   7    8   [6, 7, 4]  [5, 2, 1]
  ...

Я хотел бы добавить дополнительный столбец в фрейм данных, который содержит новый список, основанный на добавлении List_A и List_B следующим образом:

   A   B    C   List_A     List_B      List_add
   10  10   5   [0, 5, 1]  [10, 12, 0] [10, 17, 1]
   5   7    8   [6, 7, 4]  [5, 2, 1]   [11, 9, 5]
  ...

Я сделал несколько попыток безрезультатно. Некоторые примеры, которые я пробовал, и их результирующие ошибки

df['List_add'] = [x + y for x, y in zip(df['List_A'], df['List_B'])]
Error: TypeError: unsupported operand type(s) for +: 'float' and 'list'

и

df['List_add'] = np.add(df['List_A'], df['List_B'])

приводят к объединению List_A и List_B вместо добавления двух значений к значению .

Любые предложения о том, как мне поступить?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2020
df['List_add'] = a[['List_A', 'List_B']].applymap(np.array).values.sum(axis=1)

#       List_A       List_B     List_add
# 0  [0, 5, 1]  [10, 12, 0]  [10, 17, 1]
# 1  [6, 7, 4]    [5, 2, 1]   [11, 9, 5]

РЕДАКТИРОВАТЬ: Чтобы ответить на комментарий: Если вы хотите разделить каждый элемент в новом списке, вы можете просто сделать это следующим образом:

DIVISOR = 5
df['List_add'] = a[['List_A', 'List_B']].applymap(np.array).values.sum(axis=1) / DIVISOR

#       List_A       List_B         List_add
# 0  [0, 5, 1]  [10, 12, 0]  [2.0, 3.4, 0.2]
# 1  [6, 7, 4]    [5, 2, 1]  [2.2, 1.8, 1.0]

Вывод первым ответом является обычный 2-мерный массив numpy, к которому вы можете применить все нормальные функции (например, sum())

2 голосов
/ 10 февраля 2020

Исправьте ваш код

df['List_add'] = [[s + t for s,t in zip(x ,y)]for x, y in zip(df['List_A'], df['List_B'])]
df
Out[36]: 
    A   B  C     List_A       List_B     List_add
0  10  10  5  [0, 5, 1]  [10, 12, 0]  [10, 17, 1]
1   5   7  8  [6, 7, 4]    [5, 2, 1]   [11, 9, 5]
0 голосов
/ 10 февраля 2020

Здесь я использовал простой код для этой задачи:

df['List_add'] = list()
i = 0

while i < len(df['List_A']):
    df['List_add'].append(df['List_A'][i] + df['List_B'][i])
    i += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...