gpt4 book ai didi

python - Pandas :在没有行的地方添加零值(稀疏)

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:18 29 4
gpt4 key购买 nike

我有一个带有 MultiIndex 的 Pandas DataFrame。 MultiIndex 的值在 (0,0)(1000,1000) 范围内,该列有两个字段 pq.

但是,DataFrame 稀疏。也就是说,如果没有对应于特定索引的度量(例如 (3,2)),则不会有 any(3 ,2)。我想让它不稀疏,方法是用 p=0 和 q=0 填充这些行。继续这个例子,如果我执行 df.loc[3].loc[2],我希望它返回 p=0 q=0不是 没有这样的记录(目前有)。

澄清:我所说的“稀疏”是指仅在我使用它的意义上,零值被省略。我指的不是 Pandas 或 Numpy 内部的任何内容。

最佳答案

考虑这个df

data = {
(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

p q
1 0 1 1
3 2 1 1
5 4 1 1
7 6 1 1

使用 reindex 和构造的 pd.MultiIndex.from_product 中的 fill_value=0

mux = pd.MultiIndex.from_product([range(8), range(8)])
df.reindex(mux, fill_value=0)

p q
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

回复评论
您可以像这样获得最小、最大索引级别

def mn_mx(idx):
return 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)

关于python - Pandas :在没有行的地方添加零值(稀疏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41370111/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com