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

Pandas两个DataFrame按UWI关联后重复值格式化处理问题咨询

解决方案

方案1:多字段关联消除冗余行(优先推荐)

你提到存在Formation、Top sample depth、Bottom sample depth等公共字段,优先用这些字段和UWI组成联合关联键,从根源避免笛卡尔积生成冗余行,也符合同井同地层同深度区间样品匹配的业务逻辑:

# 使用多字段左关联,仅匹配属性完全对应的记录,不会生成多余行
joinedDF = df.merge(
    df1,
    on=['New_UWI', 'Formation', 'Top sample depth', 'Bottom sample depth'],
    how='left'
)
joinedDF.to_csv(r'Joined_Water_Analysis_WithLithium.csv', index=False)

方案2:单UWI关联后自动置空重复字段

如果业务要求必须保留同UWI下df1的所有记录,不需要做深度、地层匹配,可以直接在关联后对df侧重复字段批量置空,实现你要的格式要求:

import pandas as pd

# 统计每个UWI在df中的记录数N
uwi_record_cnt = df['New_UWI'].value_counts().to_dict()
# 给df添加同UWI下的行序号
df['_uwi_row_idx'] = df.groupby('New_UWI').cumcount()

# 执行单UWI关联
joinedDF = df.merge(df1, on='New_UWI', how='left', suffixes=('', '_df1'))
# 给关联结果添加同UWI下的全局行序号
joinedDF['_global_uwi_row'] = joinedDF.groupby('New_UWI').cumcount()

# 提取df原生字段列表(排除临时辅助列)
df_native_cols = [col for col in df.columns if col != '_uwi_row_idx']
# 同UWI下超过N行的记录,df侧字段全部置空
joinedDF.loc[
    joinedDF['_global_uwi_row'] >= joinedDF['New_UWI'].map(uwi_record_cnt),
    df_native_cols
] = None

# 清除临时辅助列后输出
joinedDF = joinedDF.drop(columns=['_uwi_row_idx', '_global_uwi_row'])
joinedDF.to_csv(r'Joined_Water_Analysis_WithLithium.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:54:03