Python pandas适用于更多列

时间:2015-02-04 17:00:14

标签: python pandas dataframe apply

如何使用apply with more columns在数据框中生成更多列?我的df是:

    A   B   C
0  11  21  31
1  12  22  31

如果我想只生成一个完美运行的列:

df['new_1']=df[['A','C','B']].apply(lambda x: x[1]/2, axis=1)

结果是:

    A   B   C  new_1
0  11  21  31   15.5
1  12  22  32   16.0

但是,如果我想生成多个列呢? 这非常有效:

df[['new_1','new_2']]=df[['A','C']].apply(lambda x: [x[1]/2,x[1]*2], axis=1)

结果是:

    A   B   C  new_1  new_2
0  11  21  31   15.5     62
1  12  22  32   16.0     64

但是如果我想在申请时使用两列以上该怎么办?

df[['new_1','new_2']]=df[['A','B','C']].apply(lambda x: [x[1]/2,x[2]*2], axis=1)

我收到此错误:

KeyError: "['new_1' 'new_2'] not in index"

有任何帮助吗?我使用Python 2.7和pandas 0.15.2

谢谢!

1 个答案:

答案 0 :(得分:1)

在apply中使用Series构造函数通常可以解决问题:

In [11]: df[['new_1','new_2']] = df[['A','B','C']].apply(lambda x: pd.Series([x[1]/2,x[2]*2]), axis=1)

In [12]: df
Out[12]:
    A   B   C  new_1  new_2
0  11  21  31     10     62
1  12  22  31     11     62

没有它我会看到一个不同的错误(在分配之前):

In [21]: df[['A','B','C']].apply(lambda x: [x[1]/2,x[2]*2], axis=1)
ValueError: Shape of passed values is (2, 2), indices imply (2, 3)