如何根据年份在python中桶/bin一个数据框架?



假设我有一个非常简单的数据框架,只有一列,年份。

从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'
}

最新更新