小编Kje*_*kås的帖子

Python pandas 相当于 R 的 group_by、mutate 和 ifelse

可能是重复的,但我花了太多时间在这上面,现在谷歌搜索却没有任何运气。假设我有一个数据框:

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)

python r pandas

9
推荐指数
3
解决办法
1434
查看次数

标签 统计

pandas ×1

python ×1

r ×1