2014-06-27 27 views
5

Tôi có một khung dữ liệu gấu trúc df. Tôi nhóm nó bằng 3 cột và đếm kết quả. Khi tôi làm điều này, tôi mất một số thông tin, cụ thể là cột name. Cột này được ánh xạ 1: 1 với cột desk_id. Có anyway để bao gồm cả trong dataframe cuối cùng của tôi?thiếu cột sau nhóm gấu trúc

đây là dataframe:

shift_id shift_start_time  shift_end_time  name     end_time  desk_id shift_hour 
0 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 10:16:41.040000 15557987   2 
1 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 10:16:41.096000 15557987   2 
2 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 10:52:17.402000 15557987   2 
3 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 11:06:59.083000 15557987   3 
4 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 08:27:57.998000 15557987   0 

tôi nhóm nó như thế này:

grouped = df.groupby(['desk_id', 'shift_id', 'shift_hour']).size() 
grouped = grouped.reset_index() 

Và đây là kết quả, thiếu cột name.

desk_id shift_id shift_hour 0 
0 14468690 37729081   0 7 
1 14468690 37729081   1 3 
2 14468690 37729081   2 6 
3 14468690 37729081   3 5 
4 14468690 37729082   0 5 

Ngoài ra, hãy đổi tên cột đếm thành 'đếm' thay vì '0'?

Trả lời

5

Bạn cần phải bao gồm 'name' trong groupby bởi nhóm:

In [43]: 

grouped = df.groupby(['desk_id', 'shift_id', 'shift_hour', 'name']).size() 
grouped = grouped.reset_index() 
grouped.columns=np.where(grouped.columns==0, 'count', grouped.columns) #replace the default 0 to 'count' 
print grouped 
    desk_id shift_id shift_hour  name count 
0 15557987 37423064   0 Adam Scott  1 
1 15557987 37423064   2 Adam Scott  3 
2 15557987 37423064   3 Adam Scott  1 

Nếu mối quan hệ tên-to-id là một-to-one nhiều loại, chúng ta có một pete scott cho cùng một tập hợp dữ liệu , kết quả sẽ trở thành:

desk_id shift_id shift_hour  name count 
0 15557987 37423064   0 Adam Scott  1 
1 15557987 37423064   0 Pete Scott  1 
2 15557987 37423064   2 Adam Scott  3 
3 15557987 37423064   2 Pete Scott  3 
4 15557987 37423064   3 Adam Scott  1 
5 15557987 37423064   3 Pete Scott  1 
+0

không được nhóm lại theo cụm từ này một lần nữa? Nếu nó không phải là một bản đồ 1: 1 giữa 'name' và' desk_id' thì điều này vẫn mang lại cho tôi những gì tôi muốn? – user3439329

+0

Xem chỉnh sửa. Kết quả sẽ có các tên khác, của cùng một desk_id hoặc shift_id, là tốt. –

+3

Vì vậy, nếu tôi muốn bao gồm 'shift_start_time' trong kết quả cuối cùng là tốt. Thêm vào này vào danh sách groupby là tốt? mặc dù tôi không thực sự muốn nhóm theo cột này? – user3439329

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