按月和年分组并对 Python 中的所有列求和
Group by month and year and sum all columns in Python
我有一个包含 10 列每日观察值的数据框,然后我有一个日期列。我想总结每日观察结果并按月和年分组。
数据看起来类似于:
ds c1 c2 c3 c4 c5 c6
2019-05-27 285.029066 56.891208 404.848509 172.780268 391.853462 -47.865271
2019-05-28 284.742624 83.432062 419.062742 172.039440 391.919534 -38.753380
2019-05-29 284.456182 79.556789 413.650187 171.003154 391.985605 -36.871281
2019-05-30 284.169740 63.251651 406.679183 170.160845 392.174533 -38.606698
2019-05-31 283.883298 99.122362 441.525001 169.359221 392.463681 -7.067061
我期望的输出是
ds c1 c2 c3 c4 c5 c6
2019-05 xx1 xx2 xx3 xx4 xx5 xx6
其中 xx1
到 xx6
是 2019-05-27
和 2019-05-31
之间观察值的总和。
提前致谢。
使用 DataFrame.resample
和 MS
作为 month
的开始:
#datetimeindex
df['ds'] = pd.to_datetime(df['ds'])
df = df.set_index('ds')
df = df.resample('MS').sum()
print (df)
c1 c2 c3 c4 c5 \
ds
2019-05-01 1422.28091 382.254072 2085.765622 855.342928 1960.396815
c6
ds
2019-05-01 -169.163691
或使用month periods
:
df['ds'] = pd.to_datetime(df['ds'])
df2 = df.groupby(df['ds'].dt.to_period('m')).sum()
print (df2)
c1 c2 c3 c4 c5 \
ds
2019-05 1422.28091 382.254072 2085.765622 855.342928 1960.396815
c6
ds
2019-05 -169.163691
我有一个包含 10 列每日观察值的数据框,然后我有一个日期列。我想总结每日观察结果并按月和年分组。
数据看起来类似于:
ds c1 c2 c3 c4 c5 c6
2019-05-27 285.029066 56.891208 404.848509 172.780268 391.853462 -47.865271
2019-05-28 284.742624 83.432062 419.062742 172.039440 391.919534 -38.753380
2019-05-29 284.456182 79.556789 413.650187 171.003154 391.985605 -36.871281
2019-05-30 284.169740 63.251651 406.679183 170.160845 392.174533 -38.606698
2019-05-31 283.883298 99.122362 441.525001 169.359221 392.463681 -7.067061
我期望的输出是
ds c1 c2 c3 c4 c5 c6
2019-05 xx1 xx2 xx3 xx4 xx5 xx6
其中 xx1
到 xx6
是 2019-05-27
和 2019-05-31
之间观察值的总和。
提前致谢。
使用 DataFrame.resample
和 MS
作为 month
的开始:
#datetimeindex
df['ds'] = pd.to_datetime(df['ds'])
df = df.set_index('ds')
df = df.resample('MS').sum()
print (df)
c1 c2 c3 c4 c5 \
ds
2019-05-01 1422.28091 382.254072 2085.765622 855.342928 1960.396815
c6
ds
2019-05-01 -169.163691
或使用month periods
:
df['ds'] = pd.to_datetime(df['ds'])
df2 = df.groupby(df['ds'].dt.to_period('m')).sum()
print (df2)
c1 c2 c3 c4 c5 \
ds
2019-05 1422.28091 382.254072 2085.765622 855.342928 1960.396815
c6
ds
2019-05 -169.163691