标签: multi-index

将Pandas GroupBy对象转换为DataFrame

我从这样的输入数据开始

df1 = pandas.DataFrame( { 
    "Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] , 
    "City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )
Run Code Online (Sandbox Code Playgroud)

打印时显示如下:

   City     Name
0   Seattle    Alice
1   Seattle      Bob
2  Portland  Mallory
3   Seattle  Mallory
4   Seattle      Bob
5  Portland  Mallory
Run Code Online (Sandbox Code Playgroud)

分组很简单:

g1 = df1.groupby( [ "Name", "City"] ).count()
Run Code Online (Sandbox Code Playgroud)

和打印产生一个GroupBy对象:

                  City  Name
Name    City
Alice   Seattle      1     1
Bob     Seattle      2     2
Mallory Portland     2     2
        Seattle      1     1
Run Code Online (Sandbox Code Playgroud)

但我最终想要的是另一个包含GroupBy对象中所有行的DataFrame对象.换句话说,我希望得到以下结果:

                  City  Name
Name …
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas pandas-groupby

433
推荐指数
9
解决办法
55万
查看次数

将Pandas Multi-Index变成列

我有一个包含2个索引级别的数据框:

                         value
Trial    measurement
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 
Run Code Online (Sandbox Code Playgroud)

我想转变成这个:

Trial    measurement       value

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能做到最好?

我需要这个,因为我想按照这里的指示聚合数据,但如果它们被用作索引,我就无法选择我的列.

python flatten multi-index dataframe pandas

131
推荐指数
5
解决办法
8万
查看次数

在pandas MultiIndex DataFrame中选择行

目标和动机

(x, y)API已经日益普及,多年来,然而,没有关于它的一切是完全理解在结构方面,工作和相关的操作.

一个重要的操作是过滤.过滤是一种常见的要求,但用例是多种多样的.因此,某些方法和功能将比其他用例更适用于某些用例.

总之,本文的目的是触及一些常见的过滤问题和用例,演示解决这些问题的各种不同方法,并讨论它们的适用性.本文试图解决的一些高级问题是

  • 基于单个值/标签切片
  • 基于来自一个或多个级别的多个标签进行切片
  • 过滤布尔条件和表达式
  • 哪种方法适用于什么情况

这些问题已分解为6个具体问题,如下所列.为简单起见,以下设置中的示例DataFrame仅具有两个级别,并且没有重复的索引键.提出问题的大多数解决方案可以推广到N级.

本文不会介绍如何创建MultiIndexes,如何对它们执行赋值操作,或任何与性能相关的讨论(这些是另一个时间的单独主题).


问题

问题1-6将在上下文中询问下面的设置.

mux = pd.MultiIndex.from_arrays([
    list('aaaabbbbbccddddd'),
    list('tuvwtuvwtuvwtuvw')
], names=['one', 'two'])

df = pd.DataFrame({'col': np.arange(len(mux))}, mux)

         col
one two     
a   t      0
    u      1
    v      2
    w      3
b   t      4
    u      5
    v      6
    w      7
    t      8
c   u      9
    v     10
d   w     11
    t     12
    u     13
    v     14
    w     15
Run Code Online (Sandbox Code Playgroud)

问题1:选择单个项目
如何在"1"级中选择"a"的行?

         col
one two     
a   t      0 …
Run Code Online (Sandbox Code Playgroud)

python slice multi-index dataframe pandas

78
推荐指数
2
解决办法
1万
查看次数

从多指数熊猫中选择

我有一个带有"A"和"B"列的多索引数据框.

是否有一种方法可以通过过滤多索引的一列来选择行,而无需将索引重置为单列索引.

例如.

# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to     specify a tuple

df.ix[df.A ==1]
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas

77
推荐指数
7
解决办法
9万
查看次数

熊猫多指数排序

我在pandas df中有一个包含多索引列的数据集,我希望按特定列中的值进行排序.我尝试过使用sortindex和sortlevel但是无法得到我想要的结果.我的数据集看起来像:

    Group1    Group2
    A B C     A B C
1   1 0 3     2 5 7
2   5 6 9     1 0 0
3   7 0 2     0 3 5 
Run Code Online (Sandbox Code Playgroud)

我想按照降序排列组1中C列的所有数据和索引,所以我的结果如下:

    Group1    Group2
    A B C     A B C
 2  5 6 9     1 0 0
 1  1 0 3     2 5 7
 3  7 0 2     0 3 5 
Run Code Online (Sandbox Code Playgroud)

是否可以使用我的数据所在的结构进行此类排序,还是应该将Group1交换到索引端?

python sorting multi-index pandas

74
推荐指数
1
解决办法
5万
查看次数

用多指数绘制的熊猫图

在表演之后groupby.sum(),DataFrame我在尝试制作我想要的情节时遇到了一些麻烦.

使用多索引对数据帧进行分组

如何kind='bar'为每个创建一个子图()Code,其中x轴是Month和,条是ColAColB

python matplotlib multi-index pandas

57
推荐指数
3
解决办法
4万
查看次数

Pandas:在多索引列数据框中添加一列

我想在multiindex列数据帧的第二级添加一列.

In [151]: df
Out[151]: 
first        bar                 baz           
second       one       two       one       two 
A       0.487880 -0.487661 -1.030176  0.100813 
B       0.267913  1.918923  0.132791  0.178503
C       1.550526 -0.312235 -1.177689 -0.081596 
Run Code Online (Sandbox Code Playgroud)

通常的直接分配技巧不起作用:

In [152]: df['bar']['three'] = [0, 1, 2]

In [153]: df
Out[153]: 
first        bar                 baz           
second       one       two       one       two 
A       0.487880 -0.487661 -1.030176  0.100813
B       0.267913  1.918923  0.132791  0.178503
C       1.550526 -0.312235 -1.177689 -0.081596
Run Code Online (Sandbox Code Playgroud)

如何将第三行添加到"bar"下?

multi-index pandas

56
推荐指数
2
解决办法
3万
查看次数

如何查询pandas中的MultiIndex索引列值

代码示例:

In [171]: A = np.array([1.1, 1.1, 3.3, 3.3, 5.5, 6.6])

In [172]: B = np.array([111, 222, 222, 333, 333, 777])

In [173]: C = randint(10, 99, 6)

In [174]: df = pd.DataFrame(zip(A, B, C), columns=['A', 'B', 'C'])

In [175]: df.set_index(['A', 'B'], inplace=True)

In [176]: df
Out[176]: 
          C
A   B      
1.1 111  20
    222  31
3.3 222  24
    333  65
5.5 333  22
6.6 777  74 
Run Code Online (Sandbox Code Playgroud)

现在,我想要检索A值:
Q1:在范围[3.3,6.6]中 - 预期返回值:[3.3,5.5,6.6]或[3.3,3.3,5.5,6.6],如果是最后一个,则[3.3,5.5 ]或[3.3,3.3,5.5],如果没有.
Q2:在[2.0,4.0]范围内 - 预期回报值:[3.3]或[3.3,3.3]

对于任何其他MultiIndex维度也是如此,例如B值:
Q3 …

python indexing slice multi-index pandas

56
推荐指数
3
解决办法
8万
查看次数

如何从多索引数据框中删除级别?

例如,我有:

In [1]: df = pd.DataFrame([8, 9],
                          index=pd.MultiIndex.from_tuples([(1, 1, 1),
                                                           (1, 3, 2)]),
                          columns=['A'])

In [2] df
Out[2]: 
       A
1 1 1  8
  3 2  9
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法从索引中删除最后一个级别:

In [3]: pd.DataFrame(df.values,
                     index=df.index.droplevel(2),
                     columns=df.columns)
Out[3]: 
     A
1 1  8
  3  9
Run Code Online (Sandbox Code Playgroud)

multi-index dataframe pandas

52
推荐指数
3
解决办法
5万
查看次数

pandas dataframe选择multiindex中的列

我有以下pd.DataFrame:

Name    0                       1                      ...
Col     A           B           A            B         ...
0       0.409511    -0.537108   -0.355529    0.212134  ...
1       -0.332276   -1.087013    0.083684    0.529002  ...
2       1.138159    -0.327212    0.570834    2.337718  ...
Run Code Online (Sandbox Code Playgroud)

它具有MultiIndex列names=['Name', 'Col']和层次级别.该Name标签从0到n,并为每个标签,有两个AB列.

我想要选择此DataFrame的所有A(或B)列.

python hierarchical multi-index pandas

51
推荐指数
3
解决办法
6万
查看次数