我有一个带有 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/