假设我有一个非常简单的数据框架,只有一列,年份。
从2010年到2023年将有14个不同的年份。
我需要把这些年分成三类,"旧"、"中"one_answers"新"。新年份是指最近的三年(2023年、2022年和2021年),中年份是指2015-2020年,旧年份是2010-2014年。
我该怎么做呢?
您要找的是pandas.cut
。
假设(df
)如果您的数据框架,您可以使用:
bins = [2010, 2014, 2020, 2023]
labels = ["old", "medium", "new"]
df["cat"] = pd.cut(df["year"], bins=bins, labels=labels, include_lowest=True, right=True)
下面是一个示例向您展示输出:
(
pd.DataFrame(pd.date_range("2010", periods=14, freq="Y").year, columns=["year"])
.assign(cat = lambda df_: pd.cut(df_["year"],
bins=[2010, 2014, 2020, 2023],
labels=["old", "medium", "new"],
include_lowest=True, right=True))
)
输出:
year cat
0 2010 old
1 2011 old
2 2012 old
3 2013 old
4 2014 old
5 2015 medium
6 2016 medium
7 2017 medium
8 2018 medium
9 2019 medium
10 2020 medium
11 2021 new
12 2022 new
13 2023 new
您可以像下面这样创建一个散列,并使用年份作为键来获取它的bin。
bins = {'2023' : 'new',
'2022' : 'new',
'2021' : 'new',
'2020' : 'medium',
'2019' : 'medium',
'2018' : 'medium',
'2017' : 'medium',
'2016' : 'medium',
'2015' : 'medium',
'2014' : 'old',
'2013' : 'old',
'2012' : 'old',
'2011' : 'old',
'2010' : 'old'
}