假设我有一个非常简单的 Dataframe ,只有一列,年份。从2010年到2023年将有14个不同的年份。我需要将这些年分为三类,“旧”、“中”和“新”,其中新是最近3年(2023、2022、2021),中是2015-2020年,旧是2010-2014年。我该怎么做?
ax6ht2ek1#
你要找的是pandas.cut。假设(df)是您的 * Dataframe *,您可以使用:
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
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' }
2条答案
按热度按时间ax6ht2ek1#
你要找的是
pandas.cut
。假设(
df
)是您的 * Dataframe *,您可以使用:下面是一个 * 示例 *,向您展示输出:
输出:
ddrv8njm2#
您可以创建如下所示的散列,并使用年份作为获取其bin的键。