将数据框列值映射到另一列的值

时间:2018-01-03 15:41:07

标签: python performance pandas

我的数据框有一个月份列,其值重复为AprApr.1Apr.2等,因为没有年份列。我使用for循环添加了基于月份值的年份列,如下所示,但我想找到一种更有效的方法:

Products['Year'] = '2015'
for i in range(0, len(Products.Month)):
    if '.1' in Products['Month'][i]:
        Products['Year'][i] = '2016'
    elif '.2' in Products['Month'][i]:
        Products['Year'][i] = '2017'

2 个答案:

答案 0 :(得分:0)

您可以使用.str并将整个列视为字符串以在点处分割。 现在,应用一个带有数字字符串的函数,如果可能的话,变成新的年份值。

启动数据帧:

   Month
0    Apr
1  Apr.1
2  Apr.2

解决方案:

def get_year(entry):
    value = 2015
    try:
        value += int(entry[-1])
    finally:
        return str(value)

df['Year'] = df.Month.str.split('.').apply(get_year)

现在df是:

   Month  Year
0    Apr  2015
1  Apr.1  2016
2  Apr.2  2017

答案 1 :(得分:0)

分割后可以使用pd.to_numeric并添加2015

df['new'] = pd.to_numeric(df['Month'].str.split('.').str[-1],errors='coerce').fillna(0) + 2015

# Sample DataFrame from @ Mike Muller
   Month  Year     new
0    Apr  2015  2015.0
1  Apr.1  2016  2016.0
2  Apr.2  2017  2017.0