python - 熊猫将系列分配给多索引的新列
问题描述
所以我用 MultiIndex 创建了一个数据框
df = pd.DataFrame({
'C1': ['x', 'x', 'y', 'y', 'z', 'z'],
'C2': ['a', 'b', 'a', 'b', 'a', 'b'],
'C3': [10, 11, 12, 13, 14, 15]})
df.set_index(['C1', 'C2'], inplace=True)
我得到以下数据框
C3
C1 C2
x a 10
b 11
y a 12
b 13
z a 14
b 15
我还有一个具有相同索引的系列C2
:
series = pd.Series([100], index=['a'])
我想将此系列分配给一个新列,C4
仅分配给“x”第一个索引。如果我使用它可以工作.assign
,但它会返回一个副本:
df.loc['x'].assign(C4=series)
我得到
C3 C4
C2
a 10 100.0
b 11 NaN
但我未能将其分配给原始数据
df.loc['x'] = df.loc['x'].assign(C4=series)
产量
C3
C1 C2
x a NaN
b NaN
如果我使用这样的分配,我会得到相同的结果:
df.loc['x', 'C4'] = series
但它会产生 NaN。
C3 C4
C1 C2
x a NaN NaN
b NaN NaN
y a 12.0 NaN
b 13.0 NaN
z a 14.0 NaN
b 15.0 NaN
我怎样才能以这种方式分配?
解决方案
你可以去,pd.IndexSlice
即
df.loc[pd.IndexSlice['x',series.index.tolist()],'C4'] = series.values
C3 C4
C1 C2
x a 10 100.0
b 11 NaN
y a 12 NaN
b 13 NaN
z a 14 NaN
b 15 NaN
推荐阅读
- oracle - 我在创建 TRIGGER 时犯了什么错误?
- java - Java Monitors:块代码段或代码段使用的块资源?
- angular - 我想在函数执行时在地图上添加图层
- django - 由于 requirements.txt 错误,无法在 Heroku 中部署 Django 应用
- nms - .Net 中的 AMQ - 证书或凭据
- for-loop - 为什么 for 循环的初始化器用方括号括起来?
- javascript - ngRepeat-每当我单击下拉菜单中的“全部”选项时,浏览器都会无响应
- angular - 我应该在 Ionic 5 中使用 Ngrx 吗?
- shell - 在特定 anaconda 环境下运行 spyder 的 cmd 行
- javascript - 编码 Discord 机器人时“无法读取未定义的属性‘toLowerCase’”