2016-07-15 31 views
7

Làm thế nào để bạn lặp qua Pandas Series được tạo từ lệnh .groupby('...').size() và nhận cả tên nhóm và số đếm.Cách lặp qua Pandas Series được tạo từ groupby(). Size()

Ví dụ nếu tôi có:

foo 
-1  7 
0 85 
1 14 
2  5 

thế nào tôi có thể lặp qua chúng vì thế mà mỗi lần lặp tôi sẽ phải -1 & 7, 0 & 85, 1 & 14 và 2 & 5 trong các biến ?

Tôi đã thử tùy chọn liệt kê nhưng nó không hoạt động. Ví dụ:

for i, row in enumerate(df.groupby(['foo']).size()): 
    print(i, row) 

nó không trả lại -1, 0, 1, và 2 cho i mà là 0, 1, 2, 3.

+0

liệt kê chỉ tính số mục trong chuỗi bất kỳ, nó không biết gì về chỉ mục nội bộ của Series, đó là lý do tại sao nó chỉ 0, 1, 2, 3 và sẽ giống nhau cho bất kỳ lần lặp nào –

Trả lời

17

Cập nhật:

Cho một gấu trúc series:

s = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd']) 

s 
#a 1 
#b 2 
#c 3 
#d 4 
#dtype: int64 

Bạn có thể trực tiếp vòng qua nó, mà mang lại một giá trị từ loạt trong mỗi lần lặp:

for i in s: 
    print(i) 
1 
2 
3 
4 

Nếu bạn muốn truy cập chỉ số cùng một lúc, bạn có thể sử dụng một trong hai items hoặc iteritems phương pháp, trong đó sản xuất một máy phát điện có chứa cả hai chỉ số và giá trị:

for i, v in s.items(): 
    print('index: ', i, 'value: ', v) 
#index: a value: 1 
#index: b value: 2 
#index: c value: 3 
#index: d value: 4 

for i, v in s.iteritems(): 
    print('index: ', i, 'value: ', v) 
#index: a value: 1 
#index: b value: 2 
#index: c value: 3 
#index: d value: 4 

Câu trả lời cũ:

Bạn có thể gọi phương thức iteritems() trên Series:

for i, row in df.groupby('a').size().iteritems(): 
    print(i, row) 

# 12 4 
# 14 2 

Theo doc:

Series.iteritems()

uể oải lặp qua (chỉ số, giá trị) Tuples

Lưu ý: Đây không phải là dữ liệu giống như trong câu hỏi, chỉ là một bản demo.

+2

đang tìm kiếm - cảm ơn. Tôi đã thử '.iterrows()' nhưng nó không cung cấp giải pháp mà tôi đang tìm kiếm. –

+1

'iterrows()' là phương thức cho khung dữ liệu và cho chuỗi, 'iteritems()' hoạt động. – Psidom

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