Pandas 将groupby对象转换为dataframe,同时保留组语义

Pandas 将groupby对象转换为dataframe,同时保留组语义,pandas,Pandas,我不幸地未能从中推断出一个数据帧的分组,然后将groupby计算的组语义合并回原始数据帧。似乎缺少文档,因此答案不适用于当前版本 此代码: grouped = df.groupby(pd.Grouper( key = my_time_column, freq = '15Min', label='left', sort=True)).apply(pd.DataFrame) 返回一个数据帧,但我找

我不幸地未能从中推断出一个数据帧的分组,然后将
groupby
计算的组语义合并回原始数据帧。似乎缺少文档,因此答案不适用于当前版本

此代码:

grouped = df.groupby(pd.Grouper(
            key = my_time_column, 
            freq = '15Min', 
            label='left', 
            sort=True)).apply(pd.DataFrame)
返回一个数据帧,但我找不到方法转换到一个数据帧,该数据帧具有与原始
df
相同的数据,同时用
groupby
对象中每一行所属的组的开始日期时间填充一个新列

以下是我目前的破解方法:

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

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')

您希望使用
groupby
+
transform
返回类似的索引序列。在这种情况下,可能按时间列排序并转换
。首先
将结果广播回每个组成员。如果您提供示例数据,我相信有人会提供准确的代码。您正在查找
transform()
:很抱歉,可能会误导您。我添加了解决问题的代码,基本上问题中包含的代码足够快。还不确定如何使用
transform
进行转换。我应该添加一个完整且可复制的示例。