Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多索引迭代连接数据帧_Python_Loops_Pandas_Dataframe_Multi Index - Fatal编程技术网

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)