我需要将组合列作为行的所有值的concat。
资源:
pd.DataFrame(data={
'a' : [1,2,3],
'b' : [2,3,4]
})
目标:
pd.DataFrame(data={
'a' : [1,2,3],
'b' : [2,3,4],
'combine' : [[1,2],[2,3],[3,4]]
})
当前解决方案
test['combine'] = test[['a','b']].apply(lambda x: pd.Series([x.values]), axis=1)
问题:我实际上有很多专栏,运行起来似乎太长了。这是一种更好的方式吗?
df
a b
0 1 2
1 2 3
2 3 4
如果要将列列添加为单个列,则需要调用.values
属性,将其转换为嵌套列表,然后将其分配回来 -
df['combine'] = df.values.tolist()
要么,
df['combine'] = df[['a', 'b']].values.tolist()
df
a b combine
0 1 2 [1, 2]
1 2 3 [2, 3]
2 3 4 [3, 4]
请注意,直接分配.values
结果不起作用,因为pandas
特殊情况numpy数组,导致不良结果 -
df['combine'] = df[['a', 'b']].values
ValueError: Wrong number of items passed 2, placement implies 1
几个笔记 -
apply
/ transform
。它只是一个方便的功能,用于隐藏循环的应用程序,并且速度慢,不提供任何性能/矢量化优势