2012-06-06 28 views
5

Tôi có một dataframe từ một câu hỏi trắc nghiệm và nó được định dạng như sau:Làm thế nào để chuyển đổi pandas dataframe để chỉ mục là tập duy nhất của các giá trị và dữ liệu là số lượng của mỗi giá trị?

 Sex Qu1 Qu2 Qu3 
Name 
Bob M 1 2 1 
John M 3 3 5 
Alex M 4 1 2 
Jen F 3 2 4 
Mary F 4 3 4 

Dữ liệu là một đánh giá 1-5 cho 3 câu hỏi trắc nghiệm. Tôi muốn sắp xếp lại dữ liệu sao cho chỉ mục là phạm vi (1,6) trong đó 1 = 'xấu', 2 = 'nghèo', 3 = 'ok', 4 = 'tốt', 5 = 'xuất sắc', các cột giống nhau và dữ liệu là số lần xuất hiện số của các giá trị (không bao gồm cột Giới tính). Về cơ bản, đây là biểu đồ các kích thước thùng cố định và trục x được gắn nhãn bằng các chuỗi. Tôi thích đầu ra của df.plot() tốt hơn nhiều so với df.hist() cho điều này nhưng tôi không thể tìm ra cách sắp xếp lại bảng để cung cấp cho tôi một biểu đồ dữ liệu. Ngoài ra, làm cách nào để bạn thay đổi x-label thành chuỗi?

Trả lời

17

Series.value_counts cung cấp cho bạn biểu đồ bạn đang tìm kiếm:

In [9]: df['Qu1'].value_counts() 
Out[9]: 
4 2 
3 2 
1 1 

Vì vậy, áp dụng chức năng này để mỗi người 3 cột:

In [13]: table = df[['Qu1', 'Qu2', 'Qu3']].apply(lambda x: x.value_counts()) 

In [14]: table 
Out[14]: 
    Qu1 Qu2 Qu3 
1 1 1 1 
2 NaN 2 1 
3 2 2 NaN 
4 2 NaN 2 
5 NaN NaN 1 

In [15]: table = table.fillna(0) 

In [16]: table 
Out[16]: 
    Qu1 Qu2 Qu3 
1 1 1 1 
2 0 2 1 
3 2 2 0 
4 2 0 2 
5 0 0 1 

Sử dụng table.reindex hoặc table.ix[some_array] bạn có thể sắp xếp lại dữ liệu .

Để chuyển đổi thành các chuỗi, sử dụng table.rename:

In [17]: table.rename(index=str) 
Out[17]: 
    Qu1 Qu2 Qu3 
1 1 1 1 
2 0 2 1 
3 2 2 0 
4 2 0 2 
5 0 0 1 

In [18]: table.rename(index=str).index[0] 
Out[18]: '1' 
+0

Đây chỉ là những gì tôi cần. Cảm ơn. Một vấn đề tôi tìm thấy là khi tôi chuẩn hóa dữ liệu theo tỷ lệ phần trăm (mỗi cột) và tên được sử dụng cho một số chỉ mục, sau đó vẽ biểu đồ các nhãn trục x được phân loại không chính xác sang bên trái. Nếu tôi để chỉ mục dưới dạng số nguyên hoặc giá trị dữ liệu dưới dạng số nguyên, nó hoạt động chính xác. – dailyglen

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