合并条件(或合并后用 NaN 替换)
Posted
技术标签:
【中文标题】合并条件(或合并后用 NaN 替换)【英文标题】:Merging on a condition (or replacing with NaNs after merging) 【发布时间】:2022-01-22 19:23:04 【问题描述】:我想创建一个 new_column
合并 df
和 df2
(df=pd.merge(df,df2, how='left', on='Type')
),但前提是 df['Type']=='certain_value'
因此,如果通过正常合并,new_column 将被完全填充,我想要一堆 NaN,并且只保留另一列满足特定条件的值。
有没有办法做到这一点?
我尝试在合并后用 NaN 替换值,但我也在为此苦苦挣扎:
np.where(df['Type']!='certain_value', np.NaN, df['new_column'])
这不符合我的意愿。
【问题讨论】:
检查:***.com/questions/23508351/… 合并前为什么不过滤?df=pd.merge(df.query("type == certain_value"),df2, how='left', on='Type')
【参考方案1】:
假设您的意思是要创建一个用 df2 中的特定列填充的新列,如果除了连接键之外没有列名重复,这应该可以工作。 (如果有那么它们将被添加后缀以区分来源)如果它是一个数字列,那么其他行将被隐式设置为 Nan。
rows_of_interest = df['Type']=='certain_value'
df.loc[rows_of_interest, 'new_column'] = pd.merge(df[rows_of_interest],df2, how='left', on='Type')['new_column']
【讨论】:
谢谢,非常接近,但由于某种原因,它只加入/保留 150 个值而不是 800 个。我的代码是 midstream_asset = df['Industry Sector']=='Midstream' df.loc [midstream_asset, 'Asset'] = pd.merge(df[midstream_asset],asset_lookup, on='Project Type', how='left')['Asset'],asset_lookup中的列名与原始 df(项目类型和资产)。没有拼写问题/空格/大写字母等 您可以检查 midstream_asset.sum() 和 df2[df2['Industry Sector'] == 'Midstream']] 的值,以确保您期望的数据被正确编入索引以上是关于合并条件(或合并后用 NaN 替换)的主要内容,如果未能解决你的问题,请参考以下文章