组合 GroupBy 对象(不是输出而是实际对象)
Combine GroupBy Objects (not the output but the actual objects)
不可否认,这可能不是常见的情况。本质上,我想知道是否有可能采用 groups_1=df.groupby('something')
和 groups_2=df.groupby('something_else')
并将它们放入 groups = [groups_1,groups_2]
以便我可以迭代一个可迭代组对象而不是分别迭代两个对象.这是一个例子:
# create data frame
df = pd.DataFrame({'A':np.random.random(20), 'B':np.random.random(20), 'date':pd.date_range("2021-05-01",periods = 20, freq='2W')})
# groupby at two separate frequencies
groups_1 = df.loc[df.date<'2021-11-01',:].groupby(pd.Grouper(key='date', freq='M'))
groups_2 = df.loc[df.date>='2021-11-01',:].groupby(pd.Grouper(key='date', freq='2W'))
鉴于以上情况,我很乐意做如下事情:
groups = some_concat_function([groups_1,groups_2])
for label, group in groups:
# do something here
我认为你可以使用 itertools.chain
来做到这一点:
from itertools import chain
groups = chain(groups_1, groups_2)
...
或
from itertools import chain
groups = chain.from_iterable([groups_1, groups_2])
...
不可否认,这可能不是常见的情况。本质上,我想知道是否有可能采用 groups_1=df.groupby('something')
和 groups_2=df.groupby('something_else')
并将它们放入 groups = [groups_1,groups_2]
以便我可以迭代一个可迭代组对象而不是分别迭代两个对象.这是一个例子:
# create data frame
df = pd.DataFrame({'A':np.random.random(20), 'B':np.random.random(20), 'date':pd.date_range("2021-05-01",periods = 20, freq='2W')})
# groupby at two separate frequencies
groups_1 = df.loc[df.date<'2021-11-01',:].groupby(pd.Grouper(key='date', freq='M'))
groups_2 = df.loc[df.date>='2021-11-01',:].groupby(pd.Grouper(key='date', freq='2W'))
鉴于以上情况,我很乐意做如下事情:
groups = some_concat_function([groups_1,groups_2])
for label, group in groups:
# do something here
我认为你可以使用 itertools.chain
来做到这一点:
from itertools import chain
groups = chain(groups_1, groups_2)
...
或
from itertools import chain
groups = chain.from_iterable([groups_1, groups_2])
...