python - 有条件地更改熊猫中的数据框索引
问题描述
我有一个多索引 panadas 数据框,如下所示。这只是我遇到的问题的一个例子。实际上,此数据框可能非常大,并且包含许多出现此问题的情况。
第一行index2
的值为 ,2
最后一行index1
的值为2
。这不应该是这样。结果,我需要将index1
最后一行的更改为,1
以便所有行都属于index1
1
.
given_name
index1 index2
664627 766206 1
1297240 1
1429530 1
569874 396418 1
766206 1429531 1
169874 3697813 1
123456 1598742 1
1598742 19543864 1
所需的输出应如下所示:
given_name
index1 index2
664627 766206 1
1297240 1
1429530 1
1429531 1
569874 396418 1
169874 3697813 1
123456 1598742 1
19543864 1
理想情况下,解决方案应该是矢量化且快速的。我不必使用索引。数据框可以将reset_index()
它们用作列并作为列工作,然后将列重置为索引。
解决方案
我相信需要get_level_values
第一级MultiIndex
,将其转换为Series
by ,以便通过由with创建的前向填充to_series
替换s ,最后:NaN
mask
isin
set_index
idx1 = df.index.get_level_values(0).to_series()
idx2 = df.index.get_level_values(1)
idx = idx1.mask(idx1.isin(idx2)).ffill().astype(int)
df = df.set_index([idx, idx2])
print (df)
given_name
index1 index2
1 2 1.0
3 0.0
4 1.0
5 0.5
6 7 1.0
8 1.0
9 0.0
推荐阅读
- c# - 无法使用 C# 互操作(Windows-服务-项目)访问 Excel 文件
- python - pymysql 的问题。尝试在 SELECT 子句中使用字符串
- regex - 如何在弹性搜索中编写此查询
- user-interface - 如何在 wxWidgets 中为用户调整大小设置最小 wxPanel 大小?
- r - R - 基于在 df 中搜索向量元素创建新列
- apache-zookeeper - 在 strom crawler 中运行注入器拓扑时出错
- javascript - assets 路径是指 webpack 构建后已安装包中的主应用程序
- powershell - 移动八天前的文件
- typescript - 为什么我的 SendGrid 函数返回“服务不可用”?
- javascript - 创建可下载的 csv 文件格式 JSON