我有一个简单的数据框:
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来修改它,正如下面的答案之一所指出的,直接添加列将不会给我操作列表的灵活性。
答案 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]