2012-08-15 31 views
6

Tôi đang gặp khó khăn với các chỉ mục phân cấp trong gói Python pandas. Cụ thể là tôi không hiểu cách lọc và so sánh dữ liệu trong các hàng sau khi nó đã được xoay vòng.Lọc và chọn từ các bảng tổng hợp được làm bằng gấu trúc trăn

Dưới đây là bảng ví dụ từ các tài liệu:

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 

Tôi muốn phân tích như sau:

1) Lọc bảng này trên cột thuộc tính, ví dụ chọn hàng với tiêu cực '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) So sánh các giá trị chuỗi B còn lại giữa các nhóm A khác nhau? Tôi không chắc cách truy cập thông tin này: {'one': ['A', 'B'], 'two': ['A'], 'ba': ['B']} và xác định chuỗi video nào Giá trị B là duy nhất cho mỗi khóa hoặc được thấy trong nhiều nhóm chính, v.v.

Có cách nào để thực hiện điều này trực tiếp trong cấu trúc bảng xoay vòng hay tôi cần chuyển đổi lại thành khung dữ liệu gấu trúc?

Cảm ơn bạn

chỉnh sửa: Tôi nghĩ rằng mã này là một bước đi đúng hướng. Nó ít nhất cho phép tôi tiếp cận các giá trị cá nhân trong bảng này, nhưng tôi vẫn còn cứng mã hóa thung lũng series:

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

Trả lời

9

bảng Pivot trả về một DataFrame vì vậy bạn chỉ có thể lọc bằng cách thực hiện:

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 

bạn có thể sử dụng giống như

pivoted.ix['one'] 

để chọn tất cả Một loạt nhóm

hoặc

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

để chọn riêng biệt nhóm A và B loạt

+0

Cảm ơn phản hồi của bạn. Có cách nào để lấy danh sách các giá trị trong cột bảng tổng hợp bằng cách chỉ định tiêu đề không? Tôi có thể làm điều này trên dataframe với 'df [' A ']. Giá trị' nhưng tôi đang cố gắng để có được một cái gì đó tương tự từ bảng pivot – alexhli

+0

kết quả của bảng tổng hợp là một DataFrame. Vì vậy, bạn có thể đơn giản làm 'pivoted.bar.values' –

+2

điều khiến tôi khó hiểu là khi tôi thử' pivoted.dtypes' tôi thấy thông tin trên cột C, nhưng tôi muốn xem xét các cột A và B. Tôi đã hy vọng có một cách dễ dàng để có được tập giá trị B cho mỗi giá trị A như '{'một': ['A', 'B'], 'hai': ['A'], 'ba': ['B']} 'nhưng tôi không thấy bất cứ điều gì giống như vậy trong tài liệu gấu trúc – alexhli

Các vấn đề liên quan