一个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
我可以对上述代码片段进行一些解释吗?
答案 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