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

如何合并/拼接两个不同长度的Pandas DataFrame并获取正确结果?

解决Pandas DataFrame合并匹配问题

嗨~看你的需求是要把df2里的性别信息补充到df1里对吧?我帮你梳理下解决方法:

首先先明确下df2的列名(你给的表头是0|1|2,实际对应Username、User_trim、Gender),先给df2设置正确的列名:

import pandas as pd

# 模拟你的df2数据结构
df2 = pd.DataFrame([
    ['Maria M', 'Maria', 'female'],
    ['Achim B', 'Achim', 'male'],
    ['Gustav W', 'Gustav', 'male']
], index=[0,2,5], columns=['Username', 'User_trim', 'Gender'])

方法一:基于共同列(Username)左合并

这是最稳妥的方式,因为Username是两个DataFrame里唯一能精准匹配用户的标识:

# 只取df2里的Username和Gender列用来匹配,避免生成重复列
result_df = pd.merge(df1, df2[['Username', 'Gender']], on='Username', how='left')

这里用how='left'是为了保留df1里的所有行,哪怕在df2里没有匹配项(那些User_trim为N/A的用户),这些行的Gender会自动填充为NaN,如果想换成你习惯的N/A字符串,可以再加一行:

result_df['Gender'] = result_df['Gender'].fillna('N/A')

方法二:基于索引匹配(适合当前数据结构)

因为你给的df2的索引刚好和df1中对应用户的索引完全一致(0、2、5),所以也可以直接用join按索引合并:

# 提取df2的Gender列,和df1按索引左连接
result_df = df1.join(df2['Gender'], how='left')
# 同样可以把NaN替换成N/A
result_df['Gender'] = result_df['Gender'].fillna('N/A')

最终结果

两种方法都会得到你期望的DataFrame:

UsernameUser_trimGender
Maria MMariafemale
FakeNameN/AN/A
Achim BAchimmale
FlashMaster11N/AN/A
Fakename2N/AN/A
Gustav WGustavmale

为啥你之前可能没得到正确结果?

大概率是这两个原因:

  • 用了默认的inner合并方式,这样只会保留两个DataFrame都有的行,直接丢掉了df1里那些没有Gender的用户
  • 错误选择了匹配键,比如用User_trim的话,df1里的N/A是字符串,而df2里没有对应值,就匹配不上;而且如果有重名的User_trim(虽然你这里没有),还会导致错误匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:38:15