文档中的这段代码中发生了什么?

时间:2019-09-10 08:00:28

标签: python pandas

一个Noob问题,

我正在浏览文档,找到了这个示例示例, 我不明白摘要中AAA,BBB,CCC的条件

df:

    AAA  BBB   CCC
0    4  2000  2000
1    5   555   555
2    6   555   555
3    7   555   555

然后

df_mask = pd.DataFrame({'AAA': [True] * 4,
   ...:                         'BBB': [False] * 4,
   ...:                         'CCC': [True, False] * 2})
   ...: 

In [10]: df.where(df_mask, -1000)
Out[10]: 
   AAA   BBB   CCC
0    4 -1000  2000
1    5 -1000 -1000
2    6 -1000   555
3    7 -1000 -1000

我可以对上述代码片段进行一些解释吗?

2 个答案:

答案 0 :(得分:1)

您可以检查DataFrame.where

  

cond :布尔Series / DataFrame,类似数组或可调用的
  如果cond为True,请保留原始值。如果为False,则用其他的相应值替换。如果cond是可调用的,则它是在Series / DataFrame上计算的,并且应返回布尔Series / DataFrame或数组。可调用对象不得更改输入Series / DataFrame(尽管pandas不会对其进行检查)。

     

其他:标量,Series / DataFrame或可调用
  cond为False的条目将替换为其他条目的对应值。如果other是可调用的,则在Series / DataFrame上对其进行计算,并应返回标量或Series / DataFrame。可调用对象不得更改输入Series / DataFrame(尽管pandas不会对其进行检查)。

因此,这意味着它将False(此处为other)的-1000掩码值替换掉。

示例:

df = pd.DataFrame({'AAA': [4, 5, 6, 7], 'BBB': [4, 11, 0, 8], 'CCC': [2000, 45, 555, 85]})
print (df)
   AAA  BBB   CCC
0    4    4  2000
1    5   11    45
2    6    0   555
3    7    8    85

df_mask = pd.DataFrame({'AAA': [True] * 4,
                        'BBB': [False] * 4,
                        'CCC': [True, False] * 2})

print (df.where(df_mask, -1000))
   AAA   BBB   CCC
0    4 -1000  2000
1    5 -1000 -1000
2    6 -1000   555
3    7 -1000 -1000

如果other中没有值,则替换为NaN

print (df.where(df_mask))
   AAA  BBB     CCC
0    4  NaN  2000.0
1    5  NaN     NaN
2    6  NaN   555.0
3    7  NaN     NaN

您还可以通过带有比较值的掩码,例如:

print (df.where(df > 10, -1000))
    AAA   BBB   CCC
0 -1000 -1000  2000
1 -1000    11    45
2 -1000 -1000   555
3 -1000 -1000    85

答案 1 :(得分:1)

执行print(df_mask) 您将获得如下数据框

    AAA     BBB     CCC
0   True    False   True
1   True    False   False
2   True    False   True
3   True    False   False

df.where(df_mask, -1000),您要用-1000替换False的值,最终输出如下所示

   AAA   BBB   CCC
0    4 -1000  2000
1    5 -1000 -1000
2    6 -1000   555
3    7 -1000 -1000