Trong một ý nghĩa chung, vấn đề tôi đang tìm cách giải quyết đang thay đổi một thành phần của chỉ mục đa cấp thành các cột. Tức là, tôi có một số Series
có chứa chỉ mục đa cấp và tôi muốn mức thấp nhất của chỉ mục được thay đổi thành các cột trong một dataframe
. Đây là thực tế dụ vấn đề tôi đang cố gắng để giải quyết,Chỉ mục MultiLevel cho các cột: nhận giá trị_counts như các cột trong gấu trúc
Ở đây chúng ta có thể tạo ra một số dữ liệu mẫu:
foo_choices = ["saul", "walter", "jessee"]
bar_choices = ["alpha", "beta", "foxtrot", "gamma", "hotel", "yankee"]
df = DataFrame([{"foo":random.choice(foo_choices),
"bar":random.choice(bar_choices)} for _ in range(20)])
df.head()
mà cho chúng ta,
bar foo
0 beta jessee
1 gamma jessee
2 hotel saul
3 yankee walter
4 yankee jessee
...
Bây giờ, tôi có thể groupby bar
và nhận được value_counts của trường foo
,
dfgb = df.groupby('foo')
dfgb['bar'].value_counts()
và nó kết quả đầu ra,
foo
jessee hotel 4
gamma 2
yankee 1
saul foxtrot 3
hotel 2
gamma 1
alpha 1
walter hotel 2
gamma 2
foxtrot 1
beta 1
Nhưng những gì tôi muốn là một cái gì đó như thế nào,
hotel beta foxtrot alpha gamma yankee
foo
jessee 1 1 5 4 1 1
saul 0 3 0 0 1 0
walter 1 0 0 1 1 0
Giải pháp của tôi là để viết các bit sau:
for v in df['bar'].unique():
if v is np.nan: continue
df[v] = np.nan
df.ix[df['bar'] == v, v] = 1
dfgb = df.groupby('foo')
dfgb.count()[df['bar'].unique()]
THANK BẠN! Trường hợp có 'unstack' được ẩn? – milkypostman