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

时间:2017-12-28 17:01:01

标签: python pandas dataframe

我需要将一个组合列作为该行所有值的连续符。

来源:

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)

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

1 个答案:

答案 0 :(得分:1)

cursor.execute(query)
# Python 2.7 and beyond with dictionary comprehension
results = [{key:value for key,value in row.iteritems()} for row in cursor]
# Python 2.6 and before
# results = [dict((key,value) for key,value in row.iteritems()) for row in cursor]

如果要将列列添加为单个列,则需要调用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 特殊情况 numpy数组,导致不良结果 -

pandas

几个笔记 -

  • 尽量不要使用df['combine'] = df[['a', 'b']].values ValueError: Wrong number of items passed 2, placement implies 1 / apply。它只是一个方便功能,用于隐藏循环的应用程序,并且速度慢,无法提供任何性能/矢量化优势

  • 就大熊猫而言,保留`对象列不会提高性能,所以除非目标是显示数据,否则请尽量避免使用。