【问题标题】:Pandas replace specific cells with corresponding values from another seriesPandas 用另一个系列中的相应值替换特定单元格
【发布时间】:2022-10-05 00:15:37
【问题描述】:

假设我有以下 pd.DataFrame:

INDEX a b c
A 5 7 2
B 3 2 1
C 9 6 3

还有以下 pd.Series:

a b c
-1 -4 -5

我想根据列名将大于或等于 6 的 DataFrame 替换为 Series 中的相应值。 例如,我想将单元格 Ab (7>6) 替换为 -4(因为单元格 Ab 在 col b 中,并且该系列在该索引中具有 -4)。 在上面的示例中,DataFrame 将如下所示:

~ a b c
A 5 -4 2
B 3 2 1
C -1 -4 3

我知道如何使用以下方法识别所需的单元格: df[df>=6],但是当我尝试分配系列时 (df[df>=6]=series) 出现错误。

谢谢 :)

    标签: python pandas dataframe


    【解决方案1】:

    你可以maskfillna

    out = df.mask(df.ge(6)).fillna(s, downcast='infer')
    

    输出:

           a  b  c
    INDEX         
    A      5 -4  2
    B      3  2  1
    C     -1 -4  3
    

    【讨论】:

      【解决方案2】:

      让我们一起做mask axis=1

      df.mask(df >= 6, series, axis=1)
      

             a  b  c
      INDEX         
      A      5 -4  2
      B      3  2  1
      C     -1 -4  3
      

      【讨论】:

        【解决方案3】:

        使用布尔索引和fillna

        s = pd.Series([-1,-4,-5],['a','b','c'])
        df[df.lt(6)].fillna(s)
        

                 a    b  c
        INDEX             
        A      5.0 -4.0  2
        B      3.0  2.0  1
        C     -1.0 -4.0  3
        

        【讨论】:

        • 请不要通过破坏您的帖子来为其他人做更多的工作。通过在 Stack Exchange 网络上发布,您已授予不可撤销的权利,在 CC BY-SA license (2.5/3.0/4.0) 下,Stack Exchange 可以分发该内容(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?
        猜你喜欢
        • 2016-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-22
        • 2020-06-11
        • 2018-04-22
        • 1970-01-01
        • 2019-05-16
        相关资源
        最近更新 更多