遍历Pandas分组并合并数据框
这看起来应该很简单,但我却被难住了。我真的很喜欢能够遍历分组操作的结果,我从分组中得到了我想要的结果,但我不知道怎么把最终的结果合并成一个数据框。基本上,我有下面的代码,可以把数据框放进一个列表里,但我不知道怎么循环这个数据框的列表,来生成一个数据框:
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')
2 个回答
0
因为这个需要在一个非常大的数据集上运行,所以我选择了下面这个实现方式。虽然看起来并不是很优雅,但在处理大数据集时效果还不错:
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)
1
为什么不直接这样做呢:
pd.concat(dfs, axis=1, join='outer')