【问题标题】:Setting values in one dataframe from the boolean values in another根据另一个数据框中的布尔值设置一个数据框中的值
【发布时间】:2017-02-12 16:52:50
【问题描述】:

我有一个可以用以下代码复制的 MWE:

import pandas as pd
a = pd.DataFrame([[1,2],[3,4]], columns=['A', 'B'])
b = pd.DataFrame([[True,False],[False,True]], columns=['A', 'B'])

这会创建以下数据框:

In [8]: a
Out[8]: 
   A  B
0  1  2
1  3  4

In [9]: b
Out[9]: 
       A      B
0   True  False
1  False   True

我的问题是,如何根据数据框 B 中的布尔值更改数据框 A 的值?

例如,如果我想在数据框 A 中创建 NAN 值,而在数据框 B 中有 False 的实例?

【问题讨论】:

    标签: python pandas indexing dataframe boolean


    【解决方案1】:

    如果需要将False 替换为NaN:

    print (a[b])
         A    B
    0  1.0  NaN
    1  NaN  4.0
    

    或:

    print (a.where(b))
         A    B
    0  1.0  NaN
    1  NaN  4.0
    

    如果需要,将True 替换为NaN

    print (a[~b])
         A    B
    0  NaN  2.0
    1  3.0  NaN
    

    或:

    print (a.mask(b))
         A    B
    0  NaN  2.0
    1  3.0  NaN
    

    您也可以使用带有一些标量值的wheremask

    print (a.where(b, 7))
       A  B
    0  1  7
    1  7  4
    
    print (a.mask(b, 7))
       A  B
    0  7  2
    1  3  7
    
    print (a.where(b, 'TEST'))
          A     B
    0     1  TEST
    1  TEST     4
    

    【讨论】:

    • 这似乎有效,谢谢。只是为了扩展我的问题,是否可以将数据帧 B 中的所有 False 值转换为数据帧 A 中的字符串“TEST”?我很想看看这种映射能有多灵活。
    • 谢谢,有趣的是,这似乎不适用于多索引数据帧。
    • 嗯,DataframesMultiindex 具有相同的 indexes 和相同的 columns
    • 是的,或者更具体地说,在我的示例中,我有 2 个数据框,它们都具有相同的索引(时间序列)和相同的多级列集(7 级)。上述方法不适用于那些。
    • 然后尝试添加values print (a.mask(b.values))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多