如果我有这样的熊猫数据框:
A B C D E F
0 1 NaN NaN NaN NaN NaN
1 2 5 6 1 NaN 1
2 2 3 NaN 1 4 1
3 5 5 2 1 2 1
4 NaN 2 3 4 1 2
5 NaN NaN 2 NaN NaN 1
如何仅保留非NaN值的第一组,以便获得如下所示的熊猫数据框:
A B C D E F
0 1 NaN NaN NaN NaN NaN
1 2 5 6 1 NaN NaN
2 2 3 NaN NaN NaN NaN
3 5 5 2 1 2 1
4 NaN 2 3 4 1 2
5 NaN NaN 2 NaN NaN NaN
消除NaN值之后的所有值。
答案 0 :(得分:6)
我们可以创建一个蒙版。有点难以解释,所以我会慢慢走下去
m = (df.notnull().cummax(1) & df.isnull()).cummax(1)
df.mask(m)
A B C D E F
0 1.0 NaN NaN NaN NaN NaN
1 2.0 5.0 6.0 1.0 NaN NaN
2 2.0 3.0 NaN NaN NaN NaN
3 5.0 5.0 2.0 1.0 2.0 1.0
4 NaN 2.0 3.0 4.0 1.0 2.0
5 NaN NaN 2.0 NaN NaN NaN
# Row-wise True filling after/including first non-null value.
df.notnull().cummax(1)
A B C D E F
0 True True True True True True
1 True True True True True True
2 True True True True True True
3 True True True True True True
4 False True True True True True
5 False False True True True True
# Adding the `&` condition ensures first True value for each row is after the first
# non-null group
df.notnull().cummax(1) & df.isnull()
A B C D E F
0 False True True True True True
1 False False False False True False
2 False False True False False False
3 False False False False False False
4 False False False False False False
5 False False False True True False
# We now turn everything to True after the first, row-wise
(df.notnull().cummax(1) & df.isnull()).cummax(1)
A B C D E F
0 False True True True True True
1 False False False False True True
2 False False True True True True
3 False False False False False False
4 False False False False False False
5 False False False True True True
答案 1 :(得分:4)
与Alollz逻辑不同,将library(dplyr)
library(purrr)
n <- 0.2
mget(ls(pattern= 'Data')) %>%
map_int(~ .x %>%
summarise_all(~ mean(between(., 0, 100)) >= n) %>%
unlist %>%
which %>%
first)
与cumsum
结合使用,第一个掩码是控制前导mask
,在哪里将False掩码为NaN
NaN