2012-03-06 44 views
22

Tôi tình cờ gặp pandas và có vẻ lý tưởng cho các phép tính đơn giản mà tôi muốn làm. Tôi có một nền tảng SAS và đã nghĩ rằng nó sẽ thay thế proc freq - có vẻ như nó sẽ mở rộng đến những gì tôi có thể muốn làm trong tương lai. Tuy nhiên, tôi dường như không thể có được cái đầu của tôi xung quanh một nhiệm vụ đơn giản (tôi không chắc chắn nếu tôi phải nhìn vào pivot/crosstab/indexing - cho dù tôi cần phải có một Panel hoặc DataFrames vv ...). ai đó có thể cho tôi một số gợi ý về cách làm như sau:Chữ thập đơn giản trong gấu trúc

Tôi có hai tập tin CSV (một cho năm 2010, một cho năm 2011 - dữ liệu giao dịch đơn giản) - Các cột là thể loại và số lượng

2010:

AB,100.00 
AB,200.00 
AC,150.00 
AD,500.00 

2011:

AB,500.00 
AC,250.00 
AX,900.00 

Những được nạp thành các đối tượng riêng biệt DataFrame.

Những gì tôi muốn làm là có được danh mục, tổng, chủng loại, và tần số của thể loại, ví dụ:

2010:

AB,300.00,2 
AC,150.00,1 
AD,500.00,1 

2011:

AB,500.00,1 
AC,250.00,1 
AX,900.00,1 

Tôi không thể tìm hiểu xem mình có nên sử dụng pivot/crosstab/groupby/an index v.v. ... Tôi có thể nhận tổng hoặc tần suất - dường như tôi không thể nhận được cả hai ... Nó phức tạp hơn một chút bởi vì tôi muốn làm điều đó trên cơ sở từng tháng, nhưng tôi nghĩ nếu có ai đó tốt bụng để chỉ cho tôi kỹ thuật/hướng đi đúng đắn tôi sẽ có thể đi từ đó.

+0

Vì vậy, bạn đang nói rằng mỗi tệp '.csv' chỉ là một hàng duy nhất, và sau đó trong hàng đơn đó, giá trị đầu tiên là năm tiếp theo là dữ liệu khi bạn trình bày nó ở trên? – benjaminmgross

+0

Hi Factor3, đó chỉ là cách S/O quyết định định dạng nó (lần đầu tiên tôi sử dụng nó, vì vậy sẽ phải tìm ra cho rằng trong tương lai) ... Hãy để tôi làm rõ ... có hai tập tin - 2010. csv và 2011.csv; chúng chứa 'n' nhiều hàng, mỗi hàng chứa hai cột. Tôi đã cố gắng đơn giản hóa câu hỏi - nhưng đồng ý rằng định dạng có phần gây hiểu lầm ngay bây giờ mà tôi đã đọc lại nó! –

+0

Tôi đã cung cấp một số ví dụ chi tiết và cách tiếp cận thay thế trong [** Hỏi & Đáp **] này (https://stackoverflow.com/q/47152691/2336654) mà bạn hoặc những người khác có thể thấy hữu ích. – piRSquared

Trả lời

12

Giả sử rằng bạn có một tập tin gọi là 2010.csv với nội dung

category,value 
AB,100.00 
AB,200.00 
AC,150.00 
AD,500.00 

Sau đó, sử dụng khả năng áp dụng multiple aggregation functions following a groupby, bạn có thể nói:

import pandas 
data_2010 = pandas.read_csv("/path/to/2010.csv") 
data_2010.groupby("category").agg([len, sum]) 

Bạn sẽ nhận được một kết quả rằng vẻ bề ngoài một cái gì đó như

  value  
      len sum 
category    
AB   2 300 
AC   1 150 
AD   1 500 

Lưu ý rằng Wes có thể sẽ đến từng điểm số tiền đó được tối ưu hóa và bạn nên sử dụng np.sum.

+0

Đó là sự thúc đẩy tôi cần - TY. Tôi đã cố gắng tất cả các loại với pivot_table (data_2010, rows = '???', aggfunc = {'???': '???'}) vv ... Tôi đã có một cảm giác tôi đã quá phức tạp vấn đề. Cảm ơn một lần nữa. –

16

v0.21 câu trả lời

Sử dụng pivot_table với tham số index:

df.pivot_table(index='category', aggfunc=[len, sum]) 

      len sum 
     value value 
category    
AB   2 300 
AC   1 150 
AD   1 500 

<= v0.12

Có thể làm điều này bằng pivot_table cho những người quan tâm:

In [8]: df 
Out[8]: 
    category value 
0  AB 100 
1  AB 200 
2  AC 150 
3  AD 500 

In [9]: df.pivot_table(rows='category', aggfunc=[len, np.sum]) 
Out[9]: 
      len sum 
      value value 
category    
AB   2 300 
AC   1 150 
AD   1 500 

Lưu ý rằng các cột của kết quả được lập chỉ mục phân cấp. Nếu bạn có nhiều cột dữ liệu, bạn sẽ nhận được một kết quả như thế này:

In [12]: df 
Out[12]: 
    category value value2 
0  AB 100  5 
1  AB 200  5 
2  AC 150  5 
3  AD 500  5 

In [13]: df.pivot_table(rows='category', aggfunc=[len, np.sum]) 
Out[13]: 
      len   sum   
      value value2 value value2 
category        
AB   2  2 300  10 
AC   1  1 150  5 
AD   1  1 500  5 

Lý do chính để sử dụng __builtin__.sum vs np.sum là bạn có được NA-xử lý từ sau này. Có lẽ có thể ngăn chặn được xây dựng trong Python, sẽ làm cho một lưu ý về điều đó ngay bây giờ.

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