正在进行的数字作为熊猫中的第一个多索引

Posted

技术标签:

【中文标题】正在进行的数字作为熊猫中的第一个多索引【英文标题】:Ongoing-number as first multiindex in pandas 【发布时间】:2018-09-01 10:28:48 【问题描述】:

在分组(按id)数据框df

id, last_name, first_name
sdfg, Muller, Peter
fgjh, Smith, Rob
fgjh, Smith, Robert
hjsa, Jackson, Michael

我想在开头添加另一个索引person 作为一个正在进行的数字,以便我们得到

person, id, last_name, first_name
0, sdfg, Muller, Peter
1, fgjh, Smith, Rob
1, fgjh, Smith, Robert
2, hjsa, Jackson, Michael

我尝试使用reset_index(...),但无论分组如何,这都会设置一个持续的数字。

有可能吗?

【问题讨论】:

【参考方案1】:

这是一种方法:

df.set_index((~df.index.duplicated()).cumsum()-1, append=True).swaplevel()

#         last_name  first_name
#   id                         
# 0 sdfg     Muller       Peter
# 1 fgjh      Smith         Rob
#   fgjh      Smith      Robert
# 2 hjsa    Jackson     Michael

这种方法的工作原理是取反 df.index.duplicated 的结果并获取累积和(减 1)来生成一个数组,该数组在每次索引中的值更改时递增。然后它使用set_indexappend=True 将其添加到您现有的索引中,最后使用swaplevel,这样您的新MultiIndex 的id 部分就处于第1 级。

【讨论】:

漂亮!谢谢!

以上是关于正在进行的数字作为熊猫中的第一个多索引的主要内容,如果未能解决你的问题,请参考以下文章

将列添加到熊猫数据框以进行多索引

如何对熊猫中的多索引进行分组?

熊猫列多索引中的缺失值

熊猫将第一个多索引转换为行索引,将第二个多索引转换为列索引

多索引上的熊猫数据框 groupby

在熊猫多索引数据框中返回满足逻辑索引条件的每个组的最后一行[重复]