python - 我应该如何从熊猫数据框中构造这个 json 返回
问题描述
我有一些按日期组织的数据,作为日期时间索引。然后我将其子集化,因此它实际上是不规则的:
date_rng = pd.date_range(start='1/1/2018', end='1/8/2018', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng)))
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date', drop=True)
df = df[df['data'] > 75]
在我的服务中(这不是用于交互式使用),我得到了一个字符串,我传递给它pandas.resample
以将我的时间数据聚合到任何级别。字符串直接提供给rule
参数,可以是'H'
, '3T'
, 'Q'
,等值'M'
我想使用相同的字符串来创建一个类似于以下结构的 json:
{'my_aggregate_level_1': {'2018-01-01 03:00:00', '2018-01-01 07:00:00'},
'my_aggregate_level_2':{'2018-01-08 03:00:00'}}
数组将是“参差不齐的”,即并非所有记录都存在,并且并非 json 中的所有键都具有相同的数组长度。
一个好的解决方案的目标是:
my_aggregate_level
是由与给定相同的字符串参数设置的级别resample
- 聚合级别中的数组将始终是原始的日期时间每小时值
- 理想情况下,字符串参数不与一堆“翻译规则”相关联,例如“If
'D'
then use.strftime
like this, but if'H'
use this and if'M'
use this 'H'
只会返回一个原始值的数组
所以在实践中,如果'D'
提供 a :
{'2018-01-01': {'2018-01-01 03:00:00', '2018-01-01 07:00:00'},
'2018-01-08':{'2018-01-08 03:00:00'}}
请注意,每日级别有两个键,数组中的值拆分为正确的日期。
如果'M'
提供:
{'2018-01': {'2018-01-01 03:00:00', '2018-01-01 07:00:00', '2018-01-08 03:00:00'}}
请注意,这意味着在此示例中 value 数组的内容将为 3,因为 3 个日期时间都在同一个月
我尝试过/看过但效果不佳的事情:
Groupers
,它们看起来像是仅根据某些规则进行聚合。我特别需要返回实际记录- 根据
rule
参数解析一个新列在技术上是可行的,但这似乎是错误的,因为我必须开始将每个列转换rule
为一个strftime
或类似的。我还没有找到一个接受相同字符串并且不执行聚合的函数 - 设置多索引是否可以解决此问题?可能是,但我不确定如何根据上述关于 , 等的内容填充
'D'
它'M'
。 - 自定义重采样器:
def custom_resampler(array_like):
return array_like
df.resample('W').apply(custom_resampler)
这是行不通的。
我理解,这可能是上述规则无法解决的问题,但我可能还不够擅长pandas
实现它。
解决方案
更新:
返回结构实际上是一个系列,因此可以使用此方法过滤空列表索引点:
df.resample('D').apply(custom_resampler).apply(len) > 0
原来的:
我相信我已经找到了解决方案。
具体来说,我错误地使用了自定义重采样器,实际上它们可以自己进行 json 转换。我需要进行一些处理才能得到我需要的结果,但现在这是答案:
def custom_resampler(array_like):
return array_like.to_json()
df.resample('D').apply(custom_resampler)
很高兴对此进行纠正/改进/改进。
推荐阅读
- android - 如何从 ListView setOnItemClickListener 获取项目值?
- sql - 如何使用正则表达式从字段中提取数字
- excel - 为 Excel 表中的列实现类似“标签”的过滤器?
- python - 如何将nii图像转换为2D图像?
- android - 运行时出现颤振错误:[ZeroHung]zrhung_get_config: Get config failed for wp[0x0102]
- ethers.js - 您可以将 ethers.js 与 Avalanche 网络、Polygon 网络和 Fantom Opera 一起使用吗?
- php - 删除延迟插件相关的样式表
- c# - 如果我返回值并初始化它,为什么实体框架只调用存储过程?
- flutter - 颤振 nfc_maneger 包
- python - 如何在 EC2 的公共 IP 上运行 Flask?