将两列列表作为新列添加到dataframe中

2024-04-24 14:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我构建了一个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]
  ...

我想做的是向dataframe添加一个额外的列,该列包含一个基于添加List_AList_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_AList_B的串联,而不是两个值逐值相加

有什么建议可以继续吗


Tags: 数据in框架add示例dataframepandasdf
3条回答

这里我使用了一个简单的代码来解决这个问题:

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

修正你的代码

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]
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]

第一个答案的输出是一个规则的二维numpy数组,您可以将所有的正规函数应用于该数组(例如sum()

相关问题 更多 >