我有一个pandas数据框,其中索引是从2007年到2017年的日期。
我想计算每个工作日的平均值。我能够按年分组:
groups = df.groupby(TimeGrouper('A'))
years = DataFrame()
for name, group in groups:
years[name.year] = group.values
这是我创建新数据框(年)的方式,在每个列中我获取每年的时间序列。 如果我想查看每年的统计数据(例如,平均值):
print(years.mean())
但是现在我想将每周的每一天分开,以便获得所有当天的每个工作日的平均值。
我唯一知道的是:
year=df[(df.index.year==2007)]
day_week=df[(df.index.weekday==2)]
问题在于我必须每周更换7次,然后重复11次(我的时间序列从2007年开始到2017年结束),所以我必须做77次! / p>
有没有办法按年和工作日分组时间,以便加快速度?
答案 0 :(得分:3)
DatetimeIndex.year
DatetimeIndex.weekday
groupby
rng = pd.date_range('2017-04-03', periods=10, freq='10M')
df = pd.DataFrame({'a': range(10)}, index=rng)
print (df)
a
2017-04-30 0
2018-02-28 1
2018-12-31 2
2019-10-31 3
2020-08-31 4
2021-06-30 5
2022-04-30 6
2023-02-28 7
2023-12-31 8
2024-10-31 9
df1 = df.groupby([df.index.year, df.index.weekday]).mean()
print (df1)
a
2017 6 0
2018 0 2
2 1
2019 3 3
2020 0 4
2021 2 5
2022 5 6
2023 1 7
6 8
2024 3 9
似乎需要df1 = df.groupby([df.index.year, df.index.weekday]).mean().reset_index()
df1 = df1.rename(columns={'level_0':'years','level_1':'weekdays'})
print (df1)
years weekdays a
0 2017 6 0
1 2018 0 2
2 2018 2 1
3 2019 3 3
4 2020 0 4
5 2021 2 5
6 2022 5 6
7 2023 1 7
8 2023 6 8
9 2024 3 9
JMX Publisher
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.example.Example;
...
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Object mbean = new Example();
ObjectName name = new ObjectName("org.example.MyApplication:name=Example");
mbs.registerMBean(mbean, name);