gpt4 book ai didi

python - 使用 Pandas 的 MultiIndex(多行)切片更新 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:46 26 4
gpt4 key购买 nike

我有一个维度为 I, MMultiIndex,并且希望用一个 i\in I 来更新所有 M 同时行。

这是我的数据框:

>>> result.head(n=10)
Out[9]:
FINLWT21
i INCAGG
0 1 NaN
7 NaN
9 NaN
5 NaN
3 NaN
1 1 NaN
7 NaN
9 NaN
5 NaN
3 NaN

这是我要填写的内容:

sample.groupby(field).sum()
FINLWT21
INCAGG
1 8800809.719
3 9951002.611
5 9747721.721
7 7683066.990
9 11091861.692

我认为正确的命令是 result.loc[i] = Sample.groupby(field).sum()。然而,这是之后的结果内容:

>>> result.loc[i]
Out[11]:
FINLWT21
INCAGG
1 NaN
7 NaN
9 NaN
5 NaN
3 NaN

如何同时更新所有“内部索引”?

最佳答案

您想要使用pd.IndexSlice。它返回一个可用于 loc 切片的对象。

解决方案

result.sort_index();
slc = pd.IndexSlice[i, :]
result.loc[slc, :] = sample.groupby(field).sum()

说明

result.sort_index(); -> pd.IndexSclice 要求对索引进行排序。

slc = pd.IndexSclice[i, :] -> 用于创建通用切片器的语法,以获取具有 2 个级别的 pd.MultiIndex 的第 i 组第一级别.

'result.loc[slc, :] = ` -> 使用切片

演示

import pandas as pd
import numpy as np


result = pd.DataFrame([], columns=['FINLWT21'],
index=pd.MultiIndex.from_product([[0, 1], [1, 7, 9, 5, 3]]))

result.sort_index(inplace=True);
slc = pd.IndexSlice[0, :]

result.loc[slc, :] = [1, 2, 3, 4, 5]

print result

FINLWT21
0 1 1
3 2
5 3
7 4
9 5
1 1 NaN
3 NaN
5 NaN
7 NaN
9 NaN

关于python - 使用 Pandas 的 MultiIndex(多行)切片更新 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918044/

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