将两列组合在一起会产生ValueError:传递的项目数错误2,展示位置意味着1

时间:2017-10-03 03:31:21

标签: python pandas dataframe

我有一个简单的数据框:

import pandas as pd
d = pd.DataFrame({'a':[[1], [2], [3]], 'b': [[4], [5], [6]]}) 
print d
  a    b
  0  [1]  [4]
  1  [2]  [5]
  2  [3]  [6]

我想要

  combined
 0   [1, 4]
 1   [2, 5]
 2   [3, 6]

我使用了以下

d['combined'] = d.apply(lambda row: row.a + row.b, axis=1)

它给了我错误:

ValueError: Wrong number of items passed 2, placement implies 1

为什么会

d['combined'] = d.apply(lambda row: row.a[0] + row.b[0], axis=1)

会起作用(虽然不是我需要的),但上面的代码会出错?

更新

实际上我的原始代码更像是这样:

d = pd.DataFrame({'a':[[1, 2], [2, 3], [3, 4]], 'b': [[4, 5], [5, 6], [6, 7]]}) 
        a       b
0  [1, 2]  [4, 5]
1  [2, 3]  [5, 6]
2  [3, 4]  [6, 7]

我希望将列表中b中的最后一个元素的第一个元素作为

     combined
0    [1, 5]
1    [2, 6]
2    [3, 7]

似乎我可以先创建一个带有空字符串的新列,并使用apply来修改它,正如下面的答案之一所指出的,直接添加列将不会给我操作列表的灵活性。

3 个答案:

答案 0 :(得分:4)

只需创建一个空白系列名称'合并'作为第一列,我不知道为什么ValueError: Wrong number of items passed - Meaning and suggestions?

import pandas as pd
d = pd.DataFrame({'a':[[1], [2], [3]], 'b': [[4], [5], [6]]})
d['combined'] = ''
d['combined'] = d.apply(lambda row: row.a + row.b, axis=1)

答案 1 :(得分:2)

您无需使用申请:

[2 1 1 ..., 3 3 3]

答案 2 :(得分:1)

一个简单的d.sum(1)工作

d['c'] = d.a + d.b

    a    b    c
0  [1]  [4]  [1, 4]  
1  [2]  [5]  [2, 5]  
2  [3]  [6]  [3, 6]