可能是重复的,但我花了太多时间在这上面,现在谷歌搜索却没有任何运气。假设我有一个数据框:
import pandas as pd
data = {"letters": ["a", "a", "a", "b", "b", "b"],
"boolean": [True, True, True, True, True, False],
"numbers": [1, 2, 3, 1, 2, 3]}
df = pd.DataFrame(data)
df
Run Code Online (Sandbox Code Playgroud)
我想 1)按字母分组,2)如果布尔值中的所有值都具有相同的值,则取数字的平均值。在 RI 中会写:
library(dplyr)
df %>%
group_by(letters) %>%
mutate(
condition = n_distinct(boolean) == 1,
numbers = ifelse(condition, mean(numbers), numbers)
) %>%
select(-condition)
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
# A tibble: 6 x 3
# Groups: letters [2]
letters boolean numbers
<chr> <lgl> <dbl>
1 a TRUE 2
2 a TRUE 2 …Run Code Online (Sandbox Code Playgroud)