Tôi đang cố gắng hiểu pandas
MultiIndex
DataFrame
và cách gán dữ liệu cho chúng. Cụ thể là tôi quan tâm đến việc chỉ định toàn bộ các khối khớp với một khung dữ liệu nhỏ hơn.chuyển nhượng multiand của gấu trúc từ một khung dữ liệu khác
ix = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c', 'd']])
df = pd.DataFrame(index=ix, columns=['1st', '2nd', '3rd'], dtype=np.float64)
df_ = pd.DataFrame(index=['a', 'b', 'c', 'd'], columns=['1st', '2nd', '3rd'], data=np.random.rand(4, 3))
df_
1st 2nd 3rd
a 0.730251 0.468134 0.876926
b 0.104990 0.082461 0.129083
c 0.993608 0.117799 0.341811
d 0.784950 0.840145 0.016777
df
là như nhau ngoại trừ việc tất cả các giá trị là NaN
và có hai khối A
và B
. Bây giờ nếu tôi muốn gán các giá trị từ df_
để df
tôi sẽ tưởng tượng tôi có thể làm một cái gì đó giống như
df.loc['A',:] = df_ # Runs, does not work
df.loc[('A','a'):('A','d')] = df_ # AssertionError (??) 'Start slice bound is non-scalar'
df.loc[('A','a'):('A','d')] # No AssertionError (??)
idx = pd.IndexSlice
df.loc[idx['A', :]] = df_ # Runs, does not work
Không ai trong số những công việc, họ lại tất cả các giá trị trong df
như NaN
, mặc dù df.loc[idx['A', :]]
mang lại cho tôi một lát của khung dữ liệu khớp chính xác với khung phụ (df_
). Vậy đây có phải là trường hợp đặt giá trị trên một chế độ xem không? Một cách rõ ràng iterating trên các chỉ mục trong công trình df_
# this is fine
for v in df_.index:
df.loc[idx['A', v]] = df_.loc[v]
# this is also fine
for v in df_.index:
df.loc['A', v] = df_.loc[v]
Có thậm chí có thể gán toàn bộ khối như thế này (loại giống như NumPy
)? Nếu không, đó là tốt, tôi chỉ đơn giản là cố gắng để hiểu làm thế nào hệ thống hoạt động.
Có một câu hỏi liên quan đến slicer chỉ mục, nhưng đó là về việc gán một giá trị duy nhất cho một phần được che giấu của DataFrame
, chứ không phải về việc gán khối. Pandas : Proper way to set values based on condition for subset of multiindex dataframe
Tôi thấy đó là một lời giải thích tốt, cảm ơn. Tôi thích 'df_.values', đặc biệt là vì nó cho phép bạn làm tất cả các loại bài tập một phần điên rồ. Chỉ cần cẩn thận để lập chỉ mục các khung dữ liệu theo cùng một thứ tự, tôi đã tự hỏi tại sao một số dữ liệu của tôi đột nhiên lật xung quanh (oops). –
Nếu thứ tự của các giá trị khác nhau thì có thể dễ dàng nhất để tạo chỉ mục 'df_' thành một MultiIndex và cho phép Pandas xử lý sự liên kết cho bạn. – unutbu
Thứ tự khác vì tôi đã ngu ngốc, nhưng tôi sẽ ghi nhớ điều đó. –