python - 如何将 pd.Series 添加到多索引 DataFrame 的子集?
问题描述
我有一个由以下人员创建的多索引数据框:
arrays = [['task_1','task_2', 'task_2'],['accuracy', 'accuracy', 'precision']]
mux = pd.MultiIndex.from_arrays(arrays, names=('task', 'metric'))
data = [[4., 5., 6.], [1., 1., 1.]]
res = pd.DataFrame(data, columns=mux, index=['total', 'counts']).transpose()
>>> res
total counts
task metric
task_1 accuracy 4.0 1.0
task_2 accuracy 5.0 1.0
precision 6.0 1.0
现在我想通过分别添加和来更新total
列:task_2
[0.1, 0.2]
task_2.accuracy
task_2.precision
update = pd.Series([0.1, 0.2], index=['accuracy', 'precision'])
res.total.task_2 += update
>>> res
total counts
task metric
task_1 accuracy 4.0 1.0
task_2 accuracy NaN 1.0
precision NaN 1.0
为什么我得到NaN
?从另一个问题中学习,我还尝试了两种尝试匹配update
和之间的索引的方法res.total.task_2
。但是,它们都不适用于我的情况。
res.total.task_2 += update.values
# -OR-
res.total.task_2 += update.reset_index(drop=True, inplace=True)
解决方案
我们有一个添加级别的选项,我们可以使用它series.xs
来仅在所需的第 0 级别添加,然后重新索引并添加:
res['total'] = (res['total'].xs("task_2",drop_level=False)
.add(update,level=1).reindex(res.index)
.fillna(res['total']))
print(res)
total counts
task metric
task_1 accuracy 4.0 1.0
task_2 accuracy 5.1 1.0
precision 6.2 1.0
推荐阅读
- javascript - 在反应的回调函数中为每个添加多个
- php - 我如何解决未定义的变量:响应?
- c# - 是否可以使用 Visual Studio 安装程序制作像 xampp/appserve 这样的本地 webserve
- javascript - D3 树状图直边
- sql - 在oracle中将列结果转换为多行
- angular - 将表单数据保存到实时 Firebase 数据库
- php - 如何修复使用存在函数的数据库错误?
- mysql - 如何在多列中找到最常见的值
- java - 如何在 Maven 和 Eclipse 中使用不同的依赖版本两次构建相同的源代码?
- sed - 使用sed或grep搜索替换文件中的ip地址