Python 最好使用列表理解从数据帧中的间隔变量创建新的顺序变量
我想基于现有的间隔变量在我的数据框架中创建一个新的分类变量,该变量只是将唯一值聚合到新变量的一组较小的级别/值中。 我认为使用下面的列表理解将是直接的,但我得到以下错误:Python 最好使用列表理解从数据帧中的间隔变量创建新的顺序变量,python,pandas,list-comprehension,Python,Pandas,List Comprehension,我想基于现有的间隔变量在我的数据框架中创建一个新的分类变量,该变量只是将唯一值聚合到新变量的一组较小的级别/值中。 我认为使用下面的列表理解将是直接的,但我得到以下错误: File "<ipython-input-10-c03af1b75c0c>", line 3 'set_2' elif x in (2000,2001,2002,2003,2004) ^ SyntaxError: invalid syntax 使用np。选择 cond1 = df
File "<ipython-input-10-c03af1b75c0c>", line 3
'set_2' elif x in (2000,2001,2002,2003,2004)
^
SyntaxError: invalid syntax
使用
np。选择
cond1 = df['year'].between(1995,1999)
cond2 = df['year'].between(2000,2004)
cond3 = df['year'].between(2005,2009)
cond4 = df['year'].between(2010,2014)
df['new_val'] = np.select((cond1,cond2,cond3,cond4),
('val1','val2','val3','val4'),
default='val5')
或使用pd.cut
:
df['new_val'] = pd.cut(df['year'],
bins= list(np.arange(1994,2019,5)) + np.inf,
['val1','val2','val3','val4','val5']
)
这也可能在另一方面帮助您:
def conditions(row):
if row['year'] in [1995, 1996, 1997, 1998, 1999]:
return 'value_1'
elif row['year'] in [2000, 2001, 2002, 2003, 2004]:
return 'value_2'
elif row['year'] in [2005, 2006, 2007, 2008, 2009]:
return 'value_3'
elif row['year'] in [2010, 2011, 2012, 2013, 2014]:
return 'value_4'
else:
return 'value_5'
df["new_variable"] = df.apply(conditions, axis=1)
输出:
year new_variable
0 1994 value_5
1 1995 value_1
2 1996 value_1
3 2000 value_2
4 2010 value_4
5 2015 value_5
请提供一个最小的示例(意味着我们可以运行一些最小的数据帧来重现您的错误),以便我们能够回答您的问题。
year new_variable
0 1994 value_5
1 1995 value_1
2 1996 value_1
3 2000 value_2
4 2010 value_4
5 2015 value_5