【问题标题】:How to aggregate dictionary column when datetime column is group by 20 minutes当日期时间列按 20 分钟分组时如何聚合字典列
【发布时间】:2021-03-03 22:07:29
【问题描述】:

我正在尝试根据时间间隔对日期时间列进行分组。分组时间间隔可以是 5 或 10 或 15 或其他值。在将日期时间列分组后,我需要捕获的组的最新或最高日期时间作为记录。然后我需要将字典列与最近的键值对合并。像这样的---

-------------------------------------------------------------------
created_date                 |  parameter_value  |  device_info   |
-------------------------------------------------------------------
2020-09-23 06:21:00.114104   | {'humidity': 60}    | {'device':'env', 'battery':50}
2020-09-23 06:37:00.310054   | {"pressure":54}     | {'device':'env', 'battery': 49}
2020-09-23 08:00:00.126441   | {'humidity':34}     | {'device':'env', 'battery': 45}
2020-09-23 08:21:00.140708   | {'temperature': 35} | {'device':'env', 'battery': 40}
2020-09-23 08:25:00.099155   | {'temperature':24}  | {'device':'env', 'battery': 39}

我想实现类似的响应---

--------------------------------------------------------------------------------------------------
created_date        |  parameter_value                   |  device_info                 |
--------------------------------------------------------------------------------------------------
2020-09-23 06:40:00 | {'humidity': 60, "pressure":54}    | {'device':'env', 'battery':49}
2020-09-23 08:00:00 | {'humidity':34}                    | {'device':'env', 'battery': 45}
2020-09-23 08:40:00 | {'temperature':24}                 | {'device':'env', 'battery':39}

我尝试使用 df.groupby(pd.Grouper(key='created_date', freq='20min')) 对日期时间进行分组,但如何使用以下方法合并 parameter_value 列和 device_info 列具有最新键值的聚合函数。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    GroupBy.agg 与 lambda 函数和合并字典一起使用,这里使用来自 this 的解决方案。 lst 删除只有空字典的行,将它们转换为布尔值并使用DataFrame.any 过滤:

    df = (df.groupby(pd.Grouper(key='created_date', freq='20min'))
           .agg(lambda x: {k: v for d in x for k, v in d.items()}))
    df = df[df.astype(bool).any(axis=1)]
    print (df)
                                          parameter_value  \
    created_date                                            
    2020-09-23 06:20:00  {'humidity': 60, 'pressure': 54}   
    2020-09-23 08:00:00                  {'humidity': 34}   
    2020-09-23 08:20:00               {'temperature': 24}   
    
                                              device_info  
    created_date                                           
    2020-09-23 06:20:00  {'device': 'env', 'battery': 49}  
    2020-09-23 08:00:00  {'device': 'env', 'battery': 45}  
    2020-09-23 08:20:00  {'device': 'env', 'battery': 39} 
    

    【讨论】:

      猜你喜欢
      • 2013-04-22
      • 1970-01-01
      • 2020-09-09
      • 2023-02-04
      • 2021-07-18
      • 2019-12-11
      • 2017-08-19
      • 1970-01-01
      相关资源
      最近更新 更多