用修改后的 .copy() 行替换原始 DataFrame 的行:将 .copy() 结果与原始 DataFrame 合并
Posted
技术标签:
【中文标题】用修改后的 .copy() 行替换原始 DataFrame 的行:将 .copy() 结果与原始 DataFrame 合并【英文标题】:Replacing rows of original DataFrame with modified .copy() rows: Merging .copy() results with Original DataFrame 【发布时间】:2019-11-21 10:07:15 【问题描述】:我使用 .copy()(命名为“df_copy”)提取了一个大型 DataFrame(称为“df”)的一部分,并应用了某些函数来创建一个新列“Category”。
不过,我还给了“df”一个名为“Category”的列,并为该列分配了一些其他值。 “df_copy”中的所有其他值/列与“df”中它们各自的值/列相同:唯一的区别是“类别”列。
为了理解,
原始数据帧:
df 是 100 行 3 列。 df_copy 是 df 的 5 行,具有相同的列。处理后:
df 是 100 行,4 列(新列是“类别”),其中 5 行的“类别”列具有“NaN” df_copy 是 5 行 4 列,新列是 'Category',它的值不在 df 中。基本上,我想用来自 df_copy 的当前后处理行替换我从 df 获取的行(原始 df_copy DataFrame 中的行)。
我尝试过不同形式的合并:
左合并,不指定“on”:最初复制到 df_copy 中的行的 Category 列的结果为“NA” 右合并,不指定'on':和df_copy一样 左合并,在 df 和 df_copy 之间没有变化的一列上(例如,“Number”):每一列都是重复的:“Number_x”、“Number_y”、“Category_x”、“Category_y”。【问题讨论】:
【参考方案1】:您是否尝试过使用 df.where()?
df = df.where(df['Category'].isna(), df_copy)
【讨论】:
这将 df 更改为仅在 df_copy 中的行中具有值-其他行对于每列都是 N/A 不得不进一步研究 df.where(),但这是正确的答案。如果 df['Category'].isna() 为 True,则保留原始值。如果为 false,则替换为 df_copy。以上是关于用修改后的 .copy() 行替换原始 DataFrame 的行:将 .copy() 结果与原始 DataFrame 合并的主要内容,如果未能解决你的问题,请参考以下文章