MultiIndex DataFrame是否有类似pd.DataFrame.at的单元格赋值方法?
针对MultiIndex DataFrame设置单元格值的方法
当然有啦!你完全可以用类似pd.DataFrame.at的方法来操作带MultiIndex的DataFrame,只需要把多层行索引组合成元组传入就行,另外还有loc、iat等方法也能实现目标,下面结合你的示例代码详细说明:
1. 使用at方法(最接近你想要的用法)
at方法针对单个单元格的读写非常高效,对于MultiIndex的行索引,你需要把多层标签打包成元组:
import pandas as pd arrays = [["a", "b", "c"], ["a", "b", "c"]] multi_index = pd.MultiIndex.from_product(iterables=arrays, names=["i", "k"]) partial_corr = pd.DataFrame(index=multi_index, columns=arrays[0]) # 设置(i='a', k='b')行、列'a'的单元格值 partial_corr.at[('a', 'b'), 'a'] = 0.5
2. 使用loc方法(更灵活的索引方式)
如果需要同时操作多个单元格,或者想更灵活地选择行/列,loc是很好的选择,单个单元格设置也完全没问题:
# 设置(i='a', k='c')行、列'b'的单元格值 partial_corr.loc[('a', 'c'), 'b'] = 0.8
3. 使用iat方法(按位置索引)
如果你知道目标单元格的整数位置(行和列的下标,从0开始),可以用iat直接定位:
# 设置第2行(对应i='a',k='c')、第1列(对应列'b')的单元格值 partial_corr.iat[2, 1] = 1.2
验证效果
执行完上面的设置后,打印DataFrame就能看到修改后的结果:
print(partial_corr)
输出结果:
a b c i k a a NaN NaN NaN b 0.5 NaN NaN c NaN 1.2 NaN b a NaN NaN NaN b NaN NaN NaN c NaN NaN NaN
注意:使用at或loc时,行的MultiIndex标签必须以元组形式传入,不能分开写哦!比如不能写成partial_corr.at['a', 'b', 'a'],必须是partial_corr.at[('a', 'b'), 'a']。
内容的提问来源于stack exchange,提问作者Charlie Roe
相关产品推荐
相关产品推荐

