按年份加行

Add up rows according to year

我的数据框是这样的:

            Dividends  Stock Splits
Date                               
2014-08-13       0.28           0.0
2015-04-27       0.30           0.0
2015-07-31       0.30           0.0
2016-05-05       0.30           0.0
2016-08-15       0.30           0.0
2017-05-04       0.30           0.0
2017-08-11       0.33           0.0
2018-05-03       0.50           0.0
2018-08-08       0.60           0.0
2019-05-02       0.60           0.0
2019-05-17       0.30           0.0
2019-08-05       0.30           0.0
2019-11-18       0.30           0.0
2020-04-07       0.33           0.0
2020-05-12       0.33           0.0

我喜欢把每年的分红加起来显示如下:

2015  0.60
2016  0.60
2017  0.63
2018  1.10
....

非常感谢任何帮助。非常感谢!

  1. 确保您的数据框按日期索引并且列是数字数据类型
  2. 那么就是resample()
  3. 的简单情况
data = """ Date           Dividends  Stock Splits
2014-08-13       0.28           0.0
2015-04-27       0.30           0.0
2015-07-31       0.30           0.0
2016-05-05       0.30           0.0
2016-08-15       0.30           0.0
2017-05-04       0.30           0.0
2017-08-11       0.33           0.0
2018-05-03       0.50           0.0
2018-08-08       0.60           0.0
2019-05-02       0.60           0.0
2019-05-17       0.30           0.0
2019-08-05       0.30           0.0
2019-11-18       0.30           0.0
2020-04-07       0.33           0.0
2020-05-12       0.33           0.0"""
a = [[t.strip() for t in re.split("  ",l) if t.strip()!=""]  for l in [re.sub("([0-9]?[ ])*(.*)", r"", l) for l in data.split("\n")]]
df = pd.DataFrame(a[1:], columns=a[0])
df["Date"] = pd.to_datetime(df["Date"])
df = df.set_index("Date").astype({"Dividends":"float64","Stock Splits":"float64"})
df.resample("Y").agg({"Dividends":"sum"})

输出

    Dividends
Date    
2014-12-31  0.28
2015-12-31  0.60
2016-12-31  0.60
2017-12-31  0.63
2018-12-31  1.10
2019-12-31  1.50
2020-12-31  0.66

您可以使用 pd.to_datetime 将索引 'Date' 转换为日期时间,然后尝试根据索引年份 groupby+sum:

df.index=pd.to_datetime(df.index)
df.groupby(df.index.year)['Dividends'].sum()

输出:

Date
2014    0.28
2015    0.60
2016    0.60
2017    0.63
2018    1.10
2019    1.50
2020    0.66