从使用python pandas创建的透视表中筛选和选择

2024-04-25 23:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Pythonpandas包中与层次索引作斗争。具体地说,我不知道如何在数据被旋转后对行中的数据进行筛选和比较。

以下是文档中的示例表:

import pandas as pd
import numpy as np

In [1027]: df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
                              'B' : ['A', 'B', 'C'] * 8,
                              'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                              'D' : np.random.randn(24),
                              'E' : np.random.randn(24)})

In [1029]: pd.pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
Out[1029]: 
    C             bar       foo
    A     B                    
    one   A -1.154627 -0.243234
          B -1.320253 -0.633158
          C  1.188862  0.377300
    three A -1.327977       NaN
          B       NaN -0.079051
          C -0.832506       NaN
    two   A       NaN -0.128534
          B  0.835120       NaN
          C       NaN  0.838040

我想分析如下:

1)根据列属性筛选此表,例如选择负foo行:

    C             bar       foo
    A     B                    
    one   A -1.154627 -0.243234
          B -1.320253 -0.633158
    three B       NaN -0.079051
    two   A       NaN -0.128534

2)比较不同的A序列组之间剩余的B序列值?我不知道如何访问此信息:{'one':['A','B'], 'two':['A'], 'three':['B']}并确定哪些序列B值对于每个键是唯一的,或者在多个键组中看到,等等

有没有一种方法可以直接在pivot表结构中执行此操作,或者需要将其转换回pandasdataframe

更新:我认为这段代码是朝着正确方向迈出的一步。它至少允许我访问此表中的各个值,但我仍在对序列值进行硬编码:

table = pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])
table.ix['one', 'A']

Tags: 数据importdffooasnptablebar
2条回答

只是在前面的答案中添加信息。当您尝试在python3中使用pivoted.ix['one']时,会得到以下消息:

/usr/lib/python3.7/site-packages/ipykernel_launcher.py:7: DeprecationWarning: .ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing

See the documentation here: http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated import sys

因此,在这个版本的python中,请使用以下代码:

pivoted.loc['one']

数据透视表返回一个数据帧,因此您可以通过执行以下操作进行简单筛选:

In [15]: pivoted = pivot_table(df, values='D', rows=['A', 'B'], cols=['C'])

In [16]: pivoted[pivoted.foo < 0]
Out[16]: 
C             bar       foo
A     B                    
one   A -0.412628 -1.062175
three B       NaN -0.562207
two   A       NaN -0.007245

你可以用一些像

pivoted.ix['one']

选择所有A系列组

或者

pivoted.ix['one', 'A']

选择不同的A和B系列组

相关问题 更多 >