Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 从循环中具有层次索引的dataframe创建子集表_Python_Loops_Pandas_Subset_Multi Index - Fatal编程技术网

Python 从循环中具有层次索引的dataframe创建子集表

Python 从循环中具有层次索引的dataframe创建子集表,python,loops,pandas,subset,multi-index,Python,Loops,Pandas,Subset,Multi Index,我想迭代一个层次索引panda数据帧,并根据“group1”级别打印一个子集 这是我的数据框 df = pd.DataFrame({'group1': ['a','a','a','b','b','b','c','c','d','d','d','d','d'], 'group2': ['c','c','d','d','d','e','f','f','e','d','d','d','e'], 'value

我想迭代一个层次索引panda数据帧,并根据“group1”级别打印一个子集

这是我的数据框

df = pd.DataFrame({'group1': ['a','a','a','b','b','b','c','c','d','d','d','d','d'],
                        'group2': ['c','c','d','d','d','e','f','f','e','d','d','d','e'],
                        'value1': [1.1,2,3,4,5,6,7,8,9,1,2,3,4],
                        'value2': [7.1,8,9,10,11,12,43,12,34,5,6,2,3]})

df = df.set_index(['group1', 'group2'])
这就是它看起来的样子:

               value1  value2
group1 group2                
a      c          1.1     7.1
a      c          2.0     8.0
a      d          3.0     9.0
b      d          4.0    10.0
b      d          5.0    11.0
b      e          6.0    12.0
c      f          7.0    43.0
d      f          8.0    12.0
d      e          9.0    34.0
d      d          1.0     5.0
d      d          2.0     6.0
d      d          3.0     2.0
d      e          4.0     3.0
我可以成功打印基于group1的单个子集,如下所示:

print df.xs('a', level=0)  

        value1  value2
group2                
c          1.1     7.1
c          2.0     8.0
d          3.0     9.0
但我如何才能将其放入循环中,为“group1”中的每组元素打印一个子集呢

我失败的尝试:

for group1, group2 in df.index: 
    print df.xs(group1, level=0)

这为每个索引打印了一个子集,而不是将它们分组在一起(希望有意义)。

使用索引上的
获取级别值
仅返回该级别的索引值,另外调用
unique
,因为返回的是每个子级别行的重复索引值

In [35]:

for gp in df.index.get_level_values(0).unique():
    print (df.xs(gp, level=0))
        value1  value2
group2                
c          1.1     7.1
c          2.0     8.0
d          3.0     9.0

[3 rows x 2 columns]
        value1  value2
group2                
d            4      10
d            5      11
e            6      12

[3 rows x 2 columns]
        value1  value2
group2                
f            7      43
f            8      12

[2 rows x 2 columns]
        value1  value2
group2                
e            9      34
d            1       5
d            2       6
d            3       2
e            4       3

[5 rows x 2 columns]

这就是
groupby
的作用(迭代为您提供了groupname,group):

但大多数时候,你确实想用它做点什么,例如

df.groupby(level='group1').sum()
df.groupby(level='group1').sum()