use*_*153 2 python dataframe pandas
我有一个简单的数据框:
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]
Run Code Online (Sandbox Code Playgroud)
我想得到
combined
0 [1, 4]
1 [2, 5]
2 [3, 6]
Run Code Online (Sandbox Code Playgroud)
我使用了以下
d['combined'] = d.apply(lambda row: row.a + row.b, axis=1)
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
ValueError: Wrong number of items passed 2, placement implies 1
Run Code Online (Sandbox Code Playgroud)
为什么会
d['combined'] = d.apply(lambda row: row.a[0] + row.b[0], axis=1)
Run Code Online (Sandbox Code Playgroud)
会工作(虽然不是我需要的),但是我上面的代码给出了错误?
更新:
实际上我的原始代码更像是这样的:
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]
Run Code Online (Sandbox Code Playgroud)
我想获取列表中 a 的第一个元素和 b 中的最后一个元素作为
combined
0 [1, 5]
1 [2, 6]
2 [3, 7]
Run Code Online (Sandbox Code Playgroud)
似乎我可以先创建一个带有空字符串的新列,然后使用 apply 来修改它,正如下面的一个答案所指出的那样,直接添加列不会让我灵活地操作列表。
只需先创建一个空白系列名称“组合”作为列,我不知道为什么ValueError:通过的项目数错误 - 含义和建议?
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)
Run Code Online (Sandbox Code Playgroud)