按年份加行
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
....
非常感谢任何帮助。非常感谢!
- 确保您的数据框按日期索引并且列是数字数据类型
- 那么就是
resample()
的简单情况
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
我的数据框是这样的:
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
....
非常感谢任何帮助。非常感谢!
- 确保您的数据框按日期索引并且列是数字数据类型
- 那么就是
resample()
的简单情况
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