acb*_*acb 5 python dataframe python-3.x pandas
我正在编写一个代码,该代码需要一个月的每小时数据并将其分组为24小时总和。我的问题是我希望索引读取日期/年份,而我刚得到的索引是1-30。
我正在使用的代码是
df = df.iloc[:,16:27].groupby([lambda x: x.day]).sum()
Run Code Online (Sandbox Code Playgroud)
我得到的输出示例
DateTime data
1 1772.031568
2 19884.42243
3 28696.72159
4 24906.20355
5 9059.120325
Run Code Online (Sandbox Code Playgroud)
我想要的输出示例
DateTime data
1/1/2017 1772.031568
1/2/2017 19884.42243
1/3/2017 28696.72159
1/4/2017 24906.20355
1/5/2017 9059.120325
Run Code Online (Sandbox Code Playgroud)
小智 9
这是一个老问题,但我认为在这种特殊情况下接受的解决方案不是最好的。您想要完成的是对时间序列数据进行下采样,Pandas 有内置的功能,称为resample()。对于您的示例,您将执行以下操作:
df = df.iloc[:,16:27].resample('D').sum()
Run Code Online (Sandbox Code Playgroud)
或者如果日期时间列不是索引
df = df.iloc[:,16:27].resample('D', on='datetime_column_name').sum()
Run Code Online (Sandbox Code Playgroud)
与接受的答案相比,这样做有(至少)两个好处:
有关更多信息和示例,请参阅此处的文档:resample()
如果您的索引是 a datetime,您可以构建一个组合groupby子句:
df = df.iloc[:,16:27].groupby([lambda x: "{}/{}/{}".format(x.day, x.month, x.year)]).sum()
Run Code Online (Sandbox Code Playgroud)
甚至更好:
df = df.iloc[:,16:27].groupby([lambda x: x.strftime("%d%m%Y")]).sum()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |