【问题标题】:Replacing rows of original DataFrame with modified .copy() rows: Merging .copy() results with Original DataFrame用修改后的 .copy() 行替换原始 DataFrame 的行:将 .copy() 结果与原始 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”。

【问题讨论】:

    标签: python pandas dataframe merge jupyter-notebook


    【解决方案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。
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2021-08-12
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多