python-3.x - 如何在 Pandas DataFrame 中插入第二级列和值,同时使其与第一级列保持一致?
问题描述
下面的代码创建了相关的 Pandas DataFrame:
import pandas as pd
columns_index = pd.MultiIndex.from_arrays([['Apple','Apple','Banana'], ['Light_Green','Red','Yellow']])
df = pd.DataFrame(data=None,columns=columns_index,index=[1])
df.loc[:,('Apple','Light_Green')] = 10
df.loc[:,('Apple','Red')] = 0
df.loc[:,('Banana','Yellow')] = 5
Apple Banana
Light Green Red Yellow
1 10 0 5
然后我运行以下代码来插入一个新值(以及一个新的第一级列标题到 DataFrame 中):
df.loc[:,('Apple','Dark_Green')] = 1
但是,这会生成一个 DataFrame,其中的数据排序如下:
Apple Banana Apple
Light_Green Red Yellow Dark_Green
1 10 0 5 1.0
如何以最 Pythonic 的方式将此值(和新的第一级列标题)插入 DataFrame 并确保 Dark_Green 标题在 Apple 类别内,以便 DataFrame 如下所示:
Apple Banana
Light_Green Red Dark_Green Yellow
1 10 0 1 5
是否有不同的方法用于插入数据,或者这种方法是否可以,在最佳方法之后部署了某种代码来重新排序 DataFrame?
注意:我特别需要反复动态调整 DataFrame,因此从一开始就使用 Dark_Green 标头创建 DataFrame 不是解决方案。
谢谢!
解决方案
与sort_index
df=df.sort_index(level=0,axis=1)
Apple Banana
Dark_Green Light_Green Red Yellow
1 1.0 10 0 5
推荐阅读
- prometheus - 如何找到 helm 配置的 prometheus blackbox exporter 容器正在抓取的目标
- react-native - (Expo) Uncaught Error: java.net.SocketTimeoutException: failed to connect to /10.xxxx (port xxxxx) from /192.xxx.x.xxx (port xxxxx) after 1000ms
- api - 如何使用 slack API 找出用户所在频道的 ID?
- php - 如何在树枝文件中调用函数?
- javascript - 使用 JS 或 jQuery 为每个父级重新排列子 div 的位置一次
- business-objects - SAP BO-本月和上月的经过时间
- aws-lambda - 执行 AWS Lambda 接收器连接器时出错
- python - OSError: dlopen(libiodbc.dylib, 6): image not found (Mac Big Sur, Python3.8)
- python - 共享的 Google 云端硬盘突然返回 404 与服务帐户
- python - 电报机器人是否可以响应频道中的命令?