python - 通过添加其他横截面将 pandas MultiIndex 的横截面设置为 DataFrame
问题描述
我目前正在尝试根据组内的其他索引分配具有某些索引的行。
考虑以下熊猫数据框:
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_product([list('abc'), ['aa', 'bb', 'cc']])
df = pd.DataFrame({'col1': np.arange(9),
'col2': np.arange(9, 18),
'col3': np.arange(18,27)},
index=index)
输出df
:
col1 col2 col3
a aa 0 9 18
bb 1 10 19
cc 2 11 20
b aa 3 12 21
bb 4 13 22
cc 5 14 23
c aa 6 15 24
bb 7 16 25
cc 8 17 26
我想为每个第一级索引分配索引“cc”等于“aa”加上“bb”。
以下工作正常,但我想知道是否有一种无需引用底层 NumPy 数组即可设置值的方法。
df.loc[pd.IndexSlice[:, 'cc'], :] = (df.xs('aa', level=1)
+ df.xs('bb', level=1)).values
有没有办法将“cc”行直接设置为下面的输出?我认为尝试直接设置以下内容的问题是由于索引不匹配。我能以某种方式解决这个问题吗?
df.xs('aa', level=1) + df.xs('bb', level=1)
解决方案
更新
df.iloc[df.index.get_level_values(1)=='cc'] = df.xs('aa', level=1) + df.xs('bb', level=1)
旧答案
你可以这样做:
df[df.index.get_level_values(1)=='cc'] = df.xs('aa', level=1) + df.xs('bb', level=1)
免责声明:它适用于 pandas 1.2.1 版,不适用于 pandas 1.2.3。我没有测试任何其他版本
推荐阅读
- javascript - 没有角度的离子搜索栏的自动完成
- c++ - 尝试使用 new 分配内存时出现算术溢出警告
- git - 一个 git 存储库,但一个文件在两台不同的计算机上不同
- android - 是否有任何解决方案可以在 android 模拟器颤振中获取位置
- google-api - 超出同步配额:我在哪里可以找到我的同步配额?
- java - java - 从列表中打印值
- javascript - Number.parseInt(输入, 2); 输入为十进制时不显示 2 后的二进制值
- python - 如何在 mitmproxy 插件中模拟超时?
- python - 如何将 python Tkinter 桌面应用程序转换为 Kivy Android 应用程序
- autohotkey - 在 AHK 中正常使用键并作为修饰符