Tôi có một số mã mà tóm tắt một DataFrame chứa dữ liệu Titanic nổi tiếng như sau:Reindexing một mức độ của một MultiIndex đến trật tự tùy ý trong Pandas
titanic['agecat'] = pd.cut(titanic.age, [0, 13, 20, 64, 100],
labels=['child', 'adolescent', 'adult', 'senior'])
titanic.groupby(['agecat', 'pclass','sex']
)['survived'].mean()
này tạo ra các DataFrame sau đây với một MultiIndex dựa trên groupby
cuộc gọi :
agecat pclass sex
adolescent 1 female 1.000000
male 0.200000
2 female 0.923077
male 0.117647
3 female 0.542857
male 0.125000
adult 1 female 0.965517
male 0.343284
2 female 0.868421
male 0.078125
3 female 0.441860
male 0.159184
child 1 female 0.000000
male 1.000000
2 female 1.000000
male 1.000000
3 female 0.483871
male 0.324324
senior 1 female 1.000000
male 0.142857
2 male 0.000000
3 male 0.000000
Name: survived, dtype: float64
Tuy nhiên, tôi muốn mức agecat
của MultiIndex được ra lệnh một cách tự nhiên, chứ không phải là chữ cái ra lệnh, đó là: ['child', 'adolescent', 'adult', 'senior']
. Tuy nhiên, nếu tôi thử sử dụng reindex
để thực hiện việc này:
titanic.groupby(['agecat', 'pclass','sex'])['survived'].mean().reindex(
['child', 'adolescent', 'adult', 'senior'], level='agecat')
nó không ảnh hưởng đến MultiIndex của DataFrame. Điều này có nên làm việc hay tôi đang sử dụng phương pháp sai?
Tôi nghĩ rằng những gì bạn đang đề xuất, * nên * hoạt động, xem nhận xét tại đây: https://github.com/pydata/pandas/blob/master/pandas/core/index.py#L1346, pls op vi một vấn đề tăng cường cho điều này – Jeff
Thật không may là OP là đúng, 'Dataframe.reindex()' bị hỏng khi sử dụng từ khóa 'level', ngay cả trong chi nhánh phát triển gấu trúc mới nhất kể từ ngày này. Xem https://github.com/pydata/pandas/issues/4088 –