Tôi có Pandas DataFrame với MultiIndex. Giá trị của MultiIndex nằm trong (0,0)
đến (1000,1000)
Trong phạm vi, cột có hai trường P
Và q
.
Tuy nhiên, DataFrame thưa thớt. Nghĩa là, nếu không có số liệu tương ứng với một chỉ mục cụ thể (ví dụ: (3,2)
) thì sẽ không có bất kì 行 (3,2)
. Tôi muốn làm cho nó bớt thưa thớt hơn bằng cách sử dụng p=0 và q=0
Điền vào những dòng này. Tiếp tục với ví dụ, nếu tôi thực thi df.loc[3].loc[2]
, tôi muốn nó quay trở lại p=0 q=0
,KHÔNG Không có hồ sơ như vậy (hiện tại).
Làm rõ: Bởi "thưa thớt", ý tôi chỉ là theo nghĩa tôi đang sử dụng nó, các giá trị 0 bị bỏ qua. Tôi không đề cập đến bất cứ điều gì bên trong Pandas hoặc Numpy.
xem xét điều nàydf
dữ liệu = {
(1, 0): dict(p=1, q=1),
(3, 2): dict(p=1, q=1),
(5, 4): dict(p=1, q=1),
(7, 6): dict(p=1, q=1),
}
df = pd.DataFrame(data).T
df
pq
1 0 1 1
3 2 1 1
5 4 1 1
7 6 1 1
sử dụng lập chỉ mục lại
và được xây dựng pd.MultiIndex.from_product
TRONG điền_value=0
mux = pd.MultiIndex.from_product([range(8), range(8)])
df.reindex(mux, fill_value=0)
pq
0 0 0 0
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
1 0 1 1
1 0 0
2 0 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
2 0 0 0
1 0 0
2 0 0
3 0 0
Trả lời bình luận
Bạn có thể nhận được mức chỉ số tối thiểu, tối đa như thế này
def mn_mx(idx):
trả về idx.min(), idx.max()
mn0, mx0 = mn_mx(df.index.levels[0])
mn1, mx1 = mn_mx(df.index.levels[1])
mux = pd.MultiIndex.from_product([range(mn0, mx0 + 1), range(mn1, mx1 + 1)])
df.reindex(mux, fill_value=0)
Tôi là một lập trình viên xuất sắc, rất giỏi!