Python 遍历Pandas Groupby并合并数据帧

Python 遍历Pandas Groupby并合并数据帧,python,pandas,Python,Pandas,这似乎应该是直截了当的,但却难住了我。我真的很喜欢能够遍历groupby操作的各个组,我从groupby得到了我想要的结果,但是我无法将最终结果合并到一个数据帧中。因此,基本上我有下面的代码,可以捕获列表中的数据帧,但我不知道如何循环遍历数据帧列表以生成一个数据帧: dfs = [] for name, group in df.groupby('date', sort=False): dfs.append(pd.DataFrame(pd.DataFrame(list(chain.from

这似乎应该是直截了当的,但却难住了我。我真的很喜欢能够遍历groupby操作的各个组,我从groupby得到了我想要的结果,但是我无法将最终结果合并到一个数据帧中。因此,基本上我有下面的代码,可以捕获列表中的数据帧,但我不知道如何循环遍历数据帧列表以生成一个数据帧:

dfs = []
for name, group in df.groupby('date', sort=False):
    dfs.append(pd.DataFrame(pd.DataFrame(list(chain.from_iterable(group['values'])),
                              columns=['col']).groupby('col').size(),
                               columns=[name]).reset_index())
我得到以下信息(仅显示dfs[0]和dfs[1],但我最多有dfs[8]:

   [   col1 col2
    0  val1 val2,
    ...
       col1 col2
    0  val1 val2]
    ...
我只想在col1键上合并所有元素。换句话说,下面的方法非常有效,但是我如何做到不硬编码列表中的单个元素并在dfs中循环所有元素呢

pd.concat([dfs[0], dfs[1]], axis=1, join='outer')
为什么不只是:

pd.concat(dfs, axis=1, join='outer')

因为这必须在一个非常大的数据集上工作,所以我使用了以下实现,它看起来一点也不优雅,但在大型数据集上表现得非常好:

for name, group in df.groupby('date', sort=False):
    dfs.append(pd.DataFrame(pd.DataFrame(list(chain.from_iterable(group['values'])),
                              columns=['key']).groupby('key').size(),
                               columns=[name.strftime('%Y-%m-%d')]).reset_index())

df2 = pd.concat(dfs, axis=1, join='outer')

df3 = pd.merge(pd.merge(pd.merge(pd.merge(pd.merge(pd.merge(pd.merge(pd.merge(df2.iloc[:, :2], 
        pd.DataFrame(list(set(chain.from_iterable(df['values']))), columns=['key']), how='right'),
            df2.iloc[:, 2:4], how='left'),
            df2.iloc[:, 4:6], how='left'),
            df2.iloc[:, 6:8], how='left'),
            df2.iloc[:, 8:10], how='left'),
            df2.iloc[:, 10:12], how='left'),
            df2.iloc[:, 12:14], how='left'),
            df2.iloc[:, 14:16], how='left').fillna(0).set_index('key').sort_index(axis=1)

谢谢你的回复。我不知道为什么我没有尝试。这很有效。