python - 替换多索引数据框中的特定值

标签 python pandas dataframe multi-index

我有一个带有 3 个索引级别和 2 个数字列的多索引数据框。

A   1   2017-04-01  14.0    87.346878
        2017-06-01  4.0     87.347504
    2   2014-08-01  1.0     123.110001
        2015-01-01  4.0     209.612503
B   3   2014-07-01  1.0     68.540001
        2014-12-01  1.0     64.370003
    4   2015-01-01  3.0     75.000000
我想在新的第二级索引开始的任何地方替换第三级索引第一行中的值。
例如:每一行
(A,1,2017-04-01)->0.0   0.0 
(A,2,2014-08-01)->0.0   0.0  
(B,3,2014-07-01)->0.0   0.0  
(B,4,2015-01-01)->0.0   0.0
数据框太大,按数据框做数据框,如 df.xs('A,1')...df.xs(A,2)变得耗时。有什么方法可以让我得到一个掩码并用这些位置的新值替换吗?

最佳答案

使用 DataFrame.reset_index level=2 ,然后使用 DataFrame.groupby level=[0, 1]和聚合 level_2使用 first ,然后使用 pd.MultiIndex.from_arrays 创建一个多级索引,最后使用这个多级索引来改变数据帧中的值:

idx = df.reset_index(level=2).groupby(level=[0, 1])['level_2'].first()
idx = pd.MultiIndex.from_arrays(idx.reset_index().to_numpy().T)
df.loc[idx, :] = 0
结果:
# print(df)
               col1        col2
A 1 2017-04-01  0.0    0.000000
    2017-06-01  4.0   87.347504
  2 2014-08-01  0.0    0.000000
    2015-01-01  4.0  209.612503
B 3 2014-07-01  0.0    0.000000
    2014-12-01  1.0   64.370003
  4 2015-01-01  0.0    0.000000

关于python - 替换多索引数据框中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62697810/

相关文章:

python - getrandbits 不产生恒定长度的数字

python - 嵌套在 Python 列表中的元组的任意排序

python - 比较 panda 数据框中的值并返回新值

python - 如何将分隔值转换为one-hot编码列?

r - R中的data.frame对象到xts对象的转换

python - Pandas:基于多个其他列创建一个列。申请失败()

python - 更改 Pandas 数据框中一列中的所有值

Python贪心算法

python - 在 Pandas 数据框中将第二行移到上方一行

Python 在使用 pandas 和 str.strip 时崩溃