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