Gne*_*eng 9 python dataframe pandas
我需要将一个组合列作为该行所有值的连接。
来源:
pd.DataFrame(data={
'a' : [1,2,3],
'b' : [2,3,4]
})
Run Code Online (Sandbox Code Playgroud)
目标:
pd.DataFrame(data={
'a' : [1,2,3],
'b' : [2,3,4],
'combine' : [[1,2],[2,3],[3,4]]
})
Run Code Online (Sandbox Code Playgroud)
当前解决方案:
test['combine'] = test[['a','b']].apply(lambda x: pd.Series([x.values]), axis=1)
Run Code Online (Sandbox Code Playgroud)
问题:我实际上有很多列,运行时间似乎太长了。有没有更好的办法。
cs9*_*s95 13
df
a b
0 1 2
1 2 3
2 3 4
Run Code Online (Sandbox Code Playgroud)
如果要将一列列表添加为单个列,则需要调用该.values属性,将其转换为嵌套列表,然后将其分配回 -
df['combine'] = df.values.tolist()
# or,
df['combine'] = df[['a', 'b']].values.tolist()
Run Code Online (Sandbox Code Playgroud)
df
a b combine
0 1 2 [1, 2]
1 2 3 [2, 3]
2 3 4 [3, 4]
Run Code Online (Sandbox Code Playgroud)
请注意,仅.values直接分配结果是行不通的,因为numpy 数组的pandas 特殊情况会导致不良结果,
df['combine'] = df[['a', 'b']].values
ValueError: Wrong number of items passed 2, placement implies 1
Run Code Online (Sandbox Code Playgroud)
一些注意事项 -
尽量不要使用apply/ transform。它只是一个方便的函数,旨在隐藏循环的应用程序,而且速度很慢,没有任何性能/矢量化优势
就 Pandas 而言,保留 `objects 列不会带来性能提升,所以除非目标是显示数据,否则尽量避免它。