pandas:有条件地返回列的值

时间:2015-10-29 06:43:26

标签: python pandas

我正在尝试制作一个名为' wage_rate'根据观察年份,为员工填写适当的工资率。

换句话说,我的列表看起来像这样:

iOS

我希望在一个新专栏中返回,第一行为8,第二行为9,第二行为20,25,25。

3 个答案:

答案 0 :(得分:3)

一种方法是使用'w' + str(x.year),根据In [41]: df.apply(lambda x: x['w' + str(x.year)], axis=1) Out[41]: 0 8 1 9 2 20 3 25 4 25 dtype: int64 等年份为每一行构建列名。

In [42]: df
Out[42]:
   eecode  year  w2011  w2012  w2013
0       1  2012      7      8      9
1       1  2013      7      8      9
2       2  2011     20     25     25
3       2  2012     20     25     25
4       2  2013     20     25     25

In [43]: df['wage_rate'] = df.apply(lambda x: x['w' + str(x.year)], axis=1)

In [44]: df
Out[44]:
   eecode  year  w2011  w2012  w2013  wage_rate
0       1  2012      7      8      9          8
1       1  2013      7      8      9          9
2       2  2011     20     25     25         20
3       2  2012     20     25     25         25
4       2  2013     20     25     25         25

详细说明:

{{1}}

答案 1 :(得分:2)

values = [ row['w%s'% row['year']] for key, row in df.iterrows() ]
df['wage_rate'] = values  # create the new columns

此解决方案使用显式循环,因此可能比其他纯熊猫解决方案慢,但另一方面它简单易读。

答案 2 :(得分:1)

您可以使用替换

将列名重命名为与年份列相同
In [70]:
df.columns = [re.sub('w(?=\d+4$)' , '' , column ) for column in df.columns ]

In [80]:
df.columns
Out[80]:
Index([u'eecode', u'year', u'2011', u'2012', u'2013', u'wage_rate'], dtype='object')

然后使用以下

获取值
df['wage_rate'] = df.apply(lambda x : x[str(x.year)] , axis = 1)
Out[79]:
eecode  year    2011    2012    2013    wage_rate
1       2012    7          8    9       8
1       2013    7          8    9       9
2       2011    20         25   25      20
2       2012    20         25   25      25
2       2013    20         25   25      25