python - 等效于 Python pandas 中的 'mutate_at' dplyr 函数

标签 python r pandas dplyr

并在此先感谢您的帮助。

我希望通过将现有列的子集除以另一个现有列来在 pandas 数据框中创建多个新列,并使用后缀动态命名。下面是虚拟代码,说明了我想做的事情的一般要点,除了 25 多个具有各种转换的列。

R代码

library(dplyr)

player = c('John','Peter','Michael')
min = c(20, 23, 35)
points = c(10,12,14)
rebounds = c(5,7,9)
assists = c(4,6,7)

df = data.frame(player,min,points,rebounds,assists)

df = df %>%
  mutate_at(vars(points:assists),.funs=funs(per_min=./min))

预期输出

 player min points rebounds assists points_per_min rebounds_per_min assists_per_min
1    John  20     10        5       4      0.5000000        0.2500000       0.2000000
2   Peter  23     12        7       6      0.5217391        0.3043478       0.2608696
3 Michael  35     14        9       7      0.4000000        0.2571429       0.2000000

我知道我可以在 pandas 中重现上述内容,如下所示:

import pandas as pd
data = pd.DataFrame({'player':['John','Peter','Michael'],
                     'min':[20,23,35],
                     'points':[10,12,14],
                     'rebounds':[5,7,9],
                     'assists':[4,6,7]})

df = pd.DataFrame(data)
df['points_per_minute'] = df['points']/df['min']
df['rebounds_per_minute'] = df['rebounds']/df['min']
df['assists_per_minute'] = df['assists']/df['min']

df.head()



 player  min  points  rebounds  assists  points_per_minute  rebounds_per_minute  assists_per_minute
0     John   20      10         5        4           0.500000             0.250000             0.20000
1    Peter   23      12         7        6           0.521739             0.304348             0.26087
2  Michael   35      14         9        7           0.400000             0.257143             0.20000

但是,我必须对 25+ 列执行此操作,并进行不同的转换,并且显式命名每一列,操作将变得相当麻烦。有任何 pandas 复制吗?

最佳答案

与基础 R 类似,使用基本算术按列 block 分配。通常基础 R 可以更好地转换为 Numpy/Pandas。

R

cols <- c("points", "rebounds", "assists")
df[paste0(cols, "_per_min")] <- df[cols] / df$min

Pandas

cols = ["points", "rebounds", "assists"]
df[[col+'_per_min' for col in cols]] = df[cols].div(df['min'], axis='index')

关于python - 等效于 Python pandas 中的 'mutate_at' dplyr 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57348289/

相关文章:

python - 获取 Python 中特殊字符前后的字符串

r - 如何在调试 session 期间跳过命令或代码行

python - 使用 Pandas 与每组最近的条件行的差异

python - 使用Oracle数据库,编码为UTF-8

python - 检测内置重定义(False = True)

r - 如何减少地理 map 的地 block 与边界之间的空间?

python - 更有效的 pandas 数据帧操作方式 : filtering and melting

python - 根据匹配从另一个数据帧计算数据帧字段值

python - AppEngine Google Cloud Endpoint - 未找到发现

r - 如何在R中指定3d绘图图表的相机视角?