pandas 如何在python中根据年份对 Dataframe 进行bucket/bin?

0x6upsns  于 2023-01-24  发布在  Python
关注(0)|答案(2)|浏览(98)

假设我有一个非常简单的 Dataframe ,只有一列,年份。
从2010年到2023年将有14个不同的年份。
我需要将这些年分为三类,“旧”、“中”和“新”,其中新是最近3年(2023、2022、2021),中是2015-2020年,旧是2010-2014年。
我该怎么做?

ax6ht2ek

ax6ht2ek1#

你要找的是pandas.cut
假设(df)是您的 * Dataframe *,您可以使用:

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
ddrv8njm

ddrv8njm2#

您可以创建如下所示的散列,并使用年份作为获取其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'
        }

相关问题