You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas两个DataFrame相加时如何保留首个DataFrame的原始索引顺序

问题原因

pandas执行DataFrame算术运算时,会自动对两个表的索引取并集,并且默认按字典序对结果索引重新排序。你的Buckets是字符串类型,1Y的字典序早于3M,所以就出现了乱序问题。

解决方案

方案1:运算后按df1原始索引重排

提前保存df1的原始索引,运算完成后用reindex恢复顺序,仅需修改代码最后几行:

# 先保存df1的原始索引顺序
original_index = df1.index
# 执行相加运算
df1 = df1.add(df2, fill_value=0)
# 按原始索引重排结果
df1 = df1.reindex(original_index)
print(df1)

该方法无需修改原有运算逻辑,对现有代码侵入性极低,是单次运算场景的首选方案。

方案2:将索引设为有序分类类型固定顺序

如果后续还有多次针对该索引的运算,可以提前把Buckets索引设置为有序分类类型,后续所有运算都会自动保留预设顺序:

# 定义固定的索引顺序
bucket_order = ['3M','6M','9M','1Y','2Y','3Y']
# 将两个表的索引都转为有序分类索引
df1.index = pd.CategoricalIndex(df1.index, categories=bucket_order, ordered=True)
df2.index = pd.CategoricalIndex(df2.index, categories=bucket_order, ordered=True)

# 执行相加运算,结果会自动保留预设索引顺序
df1 = df1.add(df2, fill_value=0)
print(df1)

两种方案运行后输出的索引顺序均为你需要的['3M','6M','9M','1Y','2Y','3Y'],Amount计算结果为1、2、3、8、10、12,完全符合预期。

内容的提问来源于stack exchange,提问作者Manik Singal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:39:03