繁体   English   中英

遍历Pandas Groupby和合并DataFrames

[英]Iterating through Pandas Groupby and Merging DataFrames

这似乎应该很简单,但是却让我很沮丧。 真的很喜欢能够在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM