Python 创建新的分组对象

Python 创建新的分组对象,python,numpy,pandas,Python,Numpy,Pandas,在一些转换中,我似乎被迫从Pandas dataframe分组对象中断,我希望找到一种返回该对象的方法 给定时间序列数据的数据帧,如果按数据帧中的一个值分组,我们将得到一个从键到数据帧的底层字典。 由于被迫从中生成Python dict,因此无法使用.from_dict()将该结构转换回Dataframe,因为该结构是Dataframe的关键。 据我所知,返回Pandas的唯一方法是将其转换回一个分组对象,而无需对其进行一些黑客式的列重命名。 有没有办法做到这一点 如果不是,我将如何将实例字典转

在一些转换中,我似乎被迫从Pandas dataframe分组对象中断,我希望找到一种返回该对象的方法

给定时间序列数据的数据帧,如果按数据帧中的一个值分组,我们将得到一个从键到数据帧的底层字典。 由于被迫从中生成Python dict,因此无法使用.from_dict()将该结构转换回Dataframe,因为该结构是Dataframe的关键。 据我所知,返回Pandas的唯一方法是将其转换回一个分组对象,而无需对其进行一些黑客式的列重命名。 有没有办法做到这一点

如果不是,我将如何将实例字典转换为dataframe,再转换回Pandas数据结构

编辑添加示例::

rng = pd.date_range('1/1/2000', periods=10, freq='10m')
df = pd.DataFrame({'a':pd.Series(randn(len(rng)), index=rng), 'b':pd.Series(randn(len(rng)), index=rng)})
// now have dataframe with 'a's and 'b's in time series
for k, v in df.groupby('a'):
  df_dict[k] = v
// now we apply some transformation that cannot be applied view aggregate, transform, or apply
// how do we get this back into a groupedby object?

如果我正确理解了OP的问题,那么您希望按一些键对数据帧进行分组,对每个组执行不同的操作(可能生成新列等),然后返回原始数据帧

修改示例(按随机整数分组,而不是通常唯一的浮点):

通常,如果我需要为每个组的每个列指定一个值,我会这样做(例如,“a”的和,表示“b”的平均值)

但是,如果我需要每个组的一个系列

In [19]: def func(sub_df):
        sub_df['c'] = sub_df['a'] * sub_df['b'].shift(1)
        return sub_df
   ....: 

In [20]: df.groupby('group').apply(func)
Out[20]: 
                   a         b  group         c
2000-01-31 -1.450948  0.073249      0       NaN
2000-11-30  1.910953  1.303286      2       NaN
2001-09-30  0.711879  0.213481      1       NaN
2002-07-31 -0.247738  1.017349      2 -0.322874
2003-05-31  0.361466  1.911712      2  0.367737
2004-03-31 -0.032950 -0.529672      0 -0.002414
2005-01-31 -0.221347  1.842135      2 -0.423151
2005-11-30  0.477257 -1.057235      0 -0.252789
2006-09-30 -0.691939 -0.862916      2 -1.274646
2007-07-31  0.792006  0.237631      0 -0.837336

[10 rows x 4 columns]

我猜你想要第二个例子。但是,即使以你为例,最初的问题也不是很清楚。

你能举个例子说明你想要实现什么吗?如果您已经对数据帧进行了分组,那么除了您已经拥有的原始数据帧之外,您希望“返回”到哪个数据结构?在编辑器中添加的示例您的示例仍然没有真正阐明。你在问题中说你想把它转换回一个数据帧,但是你的例子没有说明这一点。此外,如果你能提供一个你想要的实际结果的例子(即使只是一个小的“玩具”一个),这将是很有帮助的。
In [10]: df.groupby('group').aggregate({'a':np.sum, 'b':np.mean})
Out[10]: 
              a         b
group                    
0     -0.214635 -0.319007
1      0.711879  0.213481
2      1.111395  1.042313

[3 rows x 2 columns]
In [19]: def func(sub_df):
        sub_df['c'] = sub_df['a'] * sub_df['b'].shift(1)
        return sub_df
   ....: 

In [20]: df.groupby('group').apply(func)
Out[20]: 
                   a         b  group         c
2000-01-31 -1.450948  0.073249      0       NaN
2000-11-30  1.910953  1.303286      2       NaN
2001-09-30  0.711879  0.213481      1       NaN
2002-07-31 -0.247738  1.017349      2 -0.322874
2003-05-31  0.361466  1.911712      2  0.367737
2004-03-31 -0.032950 -0.529672      0 -0.002414
2005-01-31 -0.221347  1.842135      2 -0.423151
2005-11-30  0.477257 -1.057235      0 -0.252789
2006-09-30 -0.691939 -0.862916      2 -1.274646
2007-07-31  0.792006  0.237631      0 -0.837336

[10 rows x 4 columns]