Pandas,如何将多个列组合成一个数组列

问题描述 投票:0回答:1

我需要将组合列作为行的所有值的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)

问题:我实际上有很多专栏,运行起来似乎太长了。这是一种更好的方式吗?

python pandas dataframe
1个回答
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。它只是一个方便的功能,用于隐藏循环的应用程序,并且速度慢,不提供任何性能/矢量化优势
  • 保留`对象的列就大熊猫而言没有提供性能提升,所以除非目标是显示数据,否则尽量避免它。
© www.soinside.com 2019 - 2024. All rights reserved.