代码之家  ›  专栏  ›  技术社区  ›  matanster

在保留组语义的同时将pandas groupby对象转换为数据帧

  •  1
  • matanster  · 技术社区  · 7 年前

    我不幸地未能从 any answers I have found 用于对数据帧进行分组,然后将由 groupby 进入原始数据帧。似乎缺少文档,因此答案不适用于当前的熊猫版本。

    此代码:

    grouped = df.groupby(pd.Grouper(
                key = my_time_column, 
                freq = '15Min', 
                label='left', 
                sort=True)).apply(pd.DataFrame)
    

    返回一个数据帧,但我找不到任何方法可以转换到与原始数据帧具有相同数据的数据帧 df , 同时填充新列 使用开始日期时间,在 子句 对象。

    我现在的黑客解决了这个问题:

    grouped = df.groupby(pd.Grouper(
                key = my_datetime_column, 
                freq = '15Min', 
                label='left', 
                sort=True))
    
    sorted_df = grouped.apply(pd.DataFrame)
    
    interval_starts = []
    for group_idx, group_member_indices in grouped.indices.items():
        for group_member_index in group_member_indices:
            interval_starts.append(group_idx)
    
    sorted_df['interval_group_start'] = interval_starts
    

    想知道是否有优雅的熊猫之路。

    熊猫版本:0.23.0

    1 回复  |  直到 7 年前
        1
  •  1
  •   PMende    7 年前

    iiuc,这应该是你想要的:

    grouped = df.groupby(pd.Grouper(key=my_time_column, 
                                    freq = '15Min', 
                                    label='left', 
                                    sort=True))\
                .apply(pd.DataFrame)
    grouped['start'] = grouped.loc[:, my_time_column] \
                              .groupby(level=0) \
                              .transform('min')