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

Pandas合并DataFrame后Humidity未按City排序的问题求助

问题排查:Pandas Merge后Humidity值“错位”的原因及解决办法

首先澄清一个小误会:你提到的「合并后Gadarwara的Humidity变为45」其实是看错了行~ 我们先跑一遍你的代码,看看实际输出的df3:

import pandas as pd
df = pd.DataFrame({ 'City':['Kareli','Narsinghpur','Jabalpur','Gadarwara','Pipriya'], 'Temperature':[23,45,67,12,34] })
df2 = pd.DataFrame({ 'City':['Narsinghpur','Jabalpur','Pipriya','Kareli','Gadarwara'], 'Humidity':[15,23,30,45,34] })
df3 = pd.merge(df,df2,on='City')
print(df3)

输出结果是:

City  Temperature  Humidity
0     Kareli           23        45
1  Narsinghpur           45        15
2    Jabalpur           67        23
3   Gadarwara           12        34
4     Pipriya           34        30

你看,Gadarwara对应的Humidity确实是df2里的34,没错位。你看到的45是第一行Kareli的Humidity,这是df2里Kareli对应的正确值。

核心问题:你对pd.merge()的逻辑理解有偏差

pd.merge()的核心是按共同列的「值」进行匹配关联,而不是保留第二个DataFrame(df2)的行顺序。默认情况下,合并后的结果行顺序会和第一个DataFrame(df)的行顺序保持一致(因为默认是how='inner'的左表优先合并)。

所以你觉得「Humidity未按City排序」,本质是期望合并后保留df2的City顺序,但merge本身不做这件事——它只负责把两个表中City值相同的行关联起来,顺序跟随左表。

解决办法:按需求指定排序规则

如果你想要合并后的结果按照df2的City顺序排列,或者按City字母顺序排序,可以用以下两种方式:

方式1:合并后跟随df2的City顺序

我们可以把City列设置为分类类型,提前指定好想要的排序顺序,再合并排序:

# 将df的City列设置为分类,指定顺序和df2一致
df['City'] = pd.Categorical(df['City'], categories=df2['City'], ordered=True)
# 合并后按City排序
df3 = pd.merge(df, df2, on='City').sort_values('City')
print(df3)

输出会和df2的City顺序完全一致:

City  Temperature  Humidity
0  Narsinghpur           45        15
1    Jabalpur           67        23
2     Pipriya           34        30
3     Kareli           23        45
4   Gadarwara           12        34

方式2:合并后按City字母顺序排序

如果只是想要City按自然字母顺序排列,直接用sort_values()即可:

df3 = pd.merge(df, df2, on='City').sort_values('City')
print(df3)

输出:

City  Temperature  Humidity
3   Gadarwara           12        34
2    Jabalpur           67        23
0     Kareli           23        45
1  Narsinghpur           45        15
4     Pipriya           34        30

总结

Pandas的merge是「值匹配优先」,默认不会保留右表的行顺序。如果需要特定顺序,要么提前用分类类型定义排序规则,要么合并后再手动排序就好~

内容的提问来源于stack exchange,提问作者Chetan Kushwaha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:17:31