如何使用Python/Pandas从日期字段按月分组
我有一个数据帧df,如下所示:如何使用Python/Pandas从日期字段按月分组,python,pandas,Python,Pandas,我有一个数据帧df,如下所示: date value_1 value_2 2018.07.06 10 0 2018.07.14 20 1 2018.07.27 20 2 2018.08.06 30 1 2018.08.09 40 3 2018.08.13
date value_1 value_2
2018.07.06 10 0
2018.07.14 20 1
2018.07.27 20 2
2018.08.06 30 1
2018.08.09 40 3
2018.08.13 20 2
2018.09.10 30 1
2018.09.22 50 2
2018.10.09 20 3
2018.10.27 20 1
我需要按月对上述数据进行分组,以获得以下输出:
date value_1 value_2
2018.07.01 50 3
2018.08.01 90 6
2018.09.01 80 3
2018.10.01 40 4
如何在熊猫身上有效地做到这一点
df.date=pd.to_datetime(df.date)
df.groupby(df.date+pd.offsets.MonthBegin(-1)).sum()
Out[171]:
value_1 value_2
date
2018-07-01 50 3
2018-08-01 90 6
2018-09-01 80 3
2018-10-01 40 4
处理
df.date=pd.to_datetime(df.date)
df.groupby(df.date+pd.offsets.MonthBegin(-1)).sum()
Out[171]:
value_1 value_2
date
2018-07-01 50 3
2018-08-01 90 6
2018-09-01 80 3
2018-10-01 40 4
试试看,groupby使用pd.Grouper和freq='MS':
df.groupby(pd.Grouper(freq='MS', key='date')).sum().reset_index()
输出:
date value_1 value_2
0 2018-07-01 50 3
1 2018-08-01 90 6
2 2018-09-01 80 3
3 2018-10-01 40 4
date value_1 value_2
0 2018.07.01 50 3
1 2018.08.01 90 6
2 2018.09.01 80 3
3 2018.10.01 40 4
而且,如果您想恢复点日期格式,可以使用以下方法:
df_out = df.groupby(pd.Grouper(freq='MS', key='date')).sum().reset_index()
df_out['date'] = df_out['date'].dt.strftime('%Y.%m.%d')
df_out
输出:
date value_1 value_2
0 2018-07-01 50 3
1 2018-08-01 90 6
2 2018-09-01 80 3
3 2018-10-01 40 4
date value_1 value_2
0 2018.07.01 50 3
1 2018.08.01 90 6
2 2018.09.01 80 3
3 2018.10.01 40 4
试试看,groupby使用pd.Grouper和freq='MS':
df.groupby(pd.Grouper(freq='MS', key='date')).sum().reset_index()
输出:
date value_1 value_2
0 2018-07-01 50 3
1 2018-08-01 90 6
2 2018-09-01 80 3
3 2018-10-01 40 4
date value_1 value_2
0 2018.07.01 50 3
1 2018.08.01 90 6
2 2018.09.01 80 3
3 2018.10.01 40 4
而且,如果您想恢复点日期格式,可以使用以下方法:
df_out = df.groupby(pd.Grouper(freq='MS', key='date')).sum().reset_index()
df_out['date'] = df_out['date'].dt.strftime('%Y.%m.%d')
df_out
输出:
date value_1 value_2
0 2018-07-01 50 3
1 2018-08-01 90 6
2 2018-09-01 80 3
3 2018-10-01 40 4
date value_1 value_2
0 2018.07.01 50 3
1 2018.08.01 90 6
2 2018.09.01 80 3
3 2018.10.01 40 4
如果将日期作为索引,则只需重新采样即可
df.resample('MS').sum()
如果你没有把它作为索引,你可以设置索引
都给你
value_1 value_2
date
2018-07-01 50 3
2018-08-01 90 6
2018-09-01 80 3
2018-10-01 40 4
如果将日期作为索引,则只需重新采样即可
df.resample('MS').sum()
如果你没有把它作为索引,你可以设置索引
都给你
value_1 value_2
date
2018-07-01 50 3
2018-08-01 90 6
2018-09-01 80 3
2018-10-01 40 4
使用dt访问器从日期列获取月份:
df = pd.read_csv(r'C:\Users\Tim\Desktop\data.txt')
df['date'] = pd.to_datetime(df['date'])
df.groupby(df['date'].dt.month).sum()
这将创建以下输出:
value_1 value_2
date
7 50 3
8 90 6
9 80 3
10 40 4
使用dt访问器从日期列获取月份:
df = pd.read_csv(r'C:\Users\Tim\Desktop\data.txt')
df['date'] = pd.to_datetime(df['date'])
df.groupby(df['date'].dt.month).sum()
这将创建以下输出:
value_1 value_2
date
7 50 3
8 90 6
9 80 3
10 40 4
你已经试过什么了?请共享您的代码。您已经尝试了什么?请分享你的代码。