【问题标题】:Make NaN in a dataframe based on mask value of another dataframe in pandas根据 pandas 中另一个数据帧的掩码值在数据帧中生成 NaN
【发布时间】:2021-06-06 12:17:41
【问题描述】:

我有一个数据框

df1 = pd.DataFrame([["A",1,98,56,51], ["B",1,99,74,36], ["C",1,97,82,83],["B",1,96,31,90], ["C",1,45,92,12], ["A",1,67,33,55]], columns=["id","date","c1","c2","c3"])

我有另一个具有相同列名的数据框

df2 = pd.DataFrame([["A",1,False,False,True], ["B",1,False,False,True], ["C",1,False,False,False],["B",1,False,True,False], ["C",1,True,False,True], ["A",1,False,True,False]], columns=["id","date","c1","c2","c3"])

我想要一个数据框 df_out,其中 df2 中的值为 True,替换为 df1 中的空白/nan,如果为 False,则保持 df1 中的值。

预期输出:

df_out = pd.DataFrame([["A",1,98,56, ""], ["B",1,99,74,""], ["C",1,97,82,83],["B",1,96,"",90], ["C",1,"",92,""], ["A",1,67,"",55]], columns=["id","date","c1","c2","c3"])

怎么做?

【问题讨论】:

    标签: python python-3.x pandas python-2.7 dataframe


    【解决方案1】:

    试试where

    l = ['c1','c2','c3']
    df1[l] = df1[l].where(df2[l]==False,'')
    df1
    Out[199]: 
      id  date  c1  c2  c3
    0  A     1  98  56    
    1  B     1  99  74    
    2  C     1  97  82  83
    3  B     1  96      90
    4  C     1      92    
    5  A     1  67      55
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2020-10-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多