[英]How to add a pd.Series to a subset of multi-index DataFrame?
我有一个多索引 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
现在我想通过将[0.1, 0.2]
分别添加到task_2.accuracy
和task_2.precision
来更新task_2
的total
列:
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
似乎您需要通过更新所有行来更改res.total.task_2
值
res.total.task_2.iloc[:] = res.total.task_2 + update
res.total.task_2.update(res.total.task_2 + update)
或一一增值
for i in range(len(update)):
res.total.task_2.iloc[i] += update.iloc[i]
# 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.