假设我想使用多重索引构建一个pandas框架.

我开始定义数据帧的预期列:

df = pd.DataFrame(columns=["val",])

然后,我构建一些条目及其索引:

for j in range(1,5):
  tuples = [(str(j), i) for i in range(10)]
  vals = [0,1,2,3,j,j,4,4,1,1]

在for循环的每次迭代中,我希望使用新值更新数据帧.方法_append似乎不支持索引规范,我读到.loc方法要高效得多.

所以我试着做一些类似的事情:

for i2, el in enumerate(tuples):
  df.loc[el] = vals[i2] #el is a tuple

但这并没有像我预期的那样奏效: 如果我try 执行具有单个多索引和单个值的命令,如下所示:

df.loc[('1', 3)] = 4

我得到一个数据帧,看起来是这样的:

     val    3
1  NaN  4.0

而我的预期是这样的:

      val
1  3  4.0

如何在Pandas 数据帧中指定多索引的值?

推荐答案

df.loc[('1', 3)]中的圆括号不会使其成为多重索引.实际上,它相当于df.loc['1', 3],即第'1'行,第3列.

您需要使用:用途:

df.loc[('1', 3), 'val'] = 4

但该索引不能动态更改.

您必须从头开始定义多重索引:

df = pd.DataFrame(columns=["val",],
                  index=pd.MultiIndex(levels=[[], []], codes=[[], []]))
df.loc[('1', 3), 'val'] = 4

输出:

    val
1 3   4

Python相关问答推荐

用ctype构建指针链

Asyncio与队列的多处理通信-仅运行一个协程

日程优化问题不知道更好的方式来呈现解决方案- Python / Gekko

Django关于UniqueBindition的更新

单击cookie按钮,但结果不一致

如何在矩阵上并行化简单循环?

Python:记录而不是在文件中写入询问在多文件项目中记录的最佳实践

跟踪我已从数组中 Select 的样本的最有效方法

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

时间序列分解

使用miniconda创建环境的问题

. str.替换pandas.series的方法未按预期工作

管道冻结和管道卸载

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

Python解析整数格式说明符的规则?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

SQLAlchemy Like ALL ORM analog

实现神经网络代码时的TypeError

如何从需要点击/切换的网页中提取表格?

从列表中获取n个元素,其中list [i][0]== value''