我的数据框有一个月份列,其值重复为Apr
,Apr.1
,Apr.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'
答案 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