在某些转换中,我似乎被迫从Pandas数据帧分组对象中断,我想要一种方法来返回该对象。
给定时间序列数据的数据帧,如果按数据帧中的一个值分组,我们将获得从键到数据帧的基础字典。 由于被迫从中创建Python字典,因此无法使用.from_dict()将结构转换回Dataframe,因为结构是数据帧的关键。 根据我的知识,回到Pandas没有一些hacky列重命名的唯一方法是将其转换回分组对象。 有没有办法做到这一点?
如果没有,我如何将实例字典转换为数据帧回到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?
答案 0 :(得分:0)
如果我正确理解OP的问题,您希望按某些键对数据帧进行分组,对每个组执行不同的操作(可能生成新列等),然后返回原始数据帧。
修改你的例子(按随机整数分组而不是通常唯一的浮点数):
np.random.seed(200)
rng = pd.date_range('1/1/2000', periods=10, freq='10m')
df = pd.DataFrame({'a':pd.Series(np.random.randn(len(rng)), index=rng), 'b':pd.Series(np.random.randn(len(rng)), index=rng)})
df['group'] = np.random.randint(3,size=(len(df)))
通常,如果我需要每组每列的单个值,我会这样做(例如,'a'的总和,'b'的平均值)
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]
我猜你想要第二个例子。但即使你的例子,原始问题也不是很清楚。