Python 使用多索引迭代连接数据帧
我正在迭代处理几个“组”,我想将它们添加到一个数据帧中,每个组都由一个二级索引标识 这: 是向我建议的,但它不能很好地与迭代配合使用 我现在正在做Python 使用多索引迭代连接数据帧,python,loops,pandas,dataframe,multi-index,Python,Loops,Pandas,Dataframe,Multi Index,我正在迭代处理几个“组”,我想将它们添加到一个数据帧中,每个组都由一个二级索引标识 这: 是向我建议的,但它不能很好地与迭代配合使用 我现在正在做 data_all = pd.DataFrame([]) for a in a_list: group = some.function(a, etc) group = group.set_index(['CoI'], append=True, drop=True) group = group.re
data_all = pd.DataFrame([])
for a in a_list:
group = some.function(a, etc)
group = group.set_index(['CoI'], append=True, drop=True)
group = group.reorder_levels(['CoI','oldindex'])
data_all = pd.concat([data_all, group], ignore_index=False)
但最后一行完全破坏了我的多索引,我无法重建它
你能帮我一把吗?应该可以把所有的
数据列成一个列表,并在末尾连接一次:
data_all = []
for a in a_list:
group = some.function(a, etc)
group = group.set_index(['CoI'], append=True, drop=True)
group = group.reorder_levels(['CoI','oldindex'])
data_all.append(group)
data_all = pd.concat(data_all, ignore_index=False)
还要记住,pandas的concat可以与迭代器一起使用。类似于yield group
的方法可能比每次添加到列表更有效。不过我还没有分析过 我可能误读了代码,但为什么每次循环迭代时都需要concat
?data\u all
是否可以只是一个列表,而您concat
位于for循环的末尾?已解决!继续写一个答案,我会接受的。为什么循环中最后一行的括号里都是数据?由于data_all已经是一个列表,因此这似乎不必要地创建一个列表列表。为了测试这一点,我发现将数据帧列表传递给concat会引发“TypeError:无法连接非NDFrame对象”。此外,for循环不必要地缩进(如OP的post…)。
data_all = []
for a in a_list:
group = some.function(a, etc)
group = group.set_index(['CoI'], append=True, drop=True)
group = group.reorder_levels(['CoI','oldindex'])
data_all.append(group)
data_all = pd.concat(data_all, ignore_index=False)