python - 基于正则表达式中定义的其他变量的总和创建变量的单线?
问题描述
我对 R 非常熟悉,刚开始尝试自学 python。我正在尝试复制以下代码行:
regex <- paste0("precip_pday_", 30:185, collapse = "|")
dat$TAP <- rowSums(dat[,grepl(regex, colnames(dat))])/1000
基本上只需创建一个正则表达式,然后将与正则表达式匹配的变量逐行求和。我想我可以很容易地不折叠字符串并使用%in%
.
我试图在 python 中复制它,我能做的最好的就是嵌套的 for 循环和 if 语句,需要 15 行:
import re
import pandas as pd
regex = re.compile("precip")
idx = []
for i in range(0, len(list(df))-1, 1):
name = list(df)[i]
found = regex.findall(name)
if len(found) > 0:
day = name.split("_")[2]
if int(day) in range(30, 185, 1):
idx.append(i)
cols_I_want = df.iloc[:,idx]
df["TAP"] = cols_I_want.sum(axis = 1)/1000
这怎么能简化呢?变得更有效率?
这是一个假数据集,用于完成 MWE:
fake_df <- as.data.frame(matrix(rnorm(1000*365), nrow = 1000, ncol = 365))
colnames(fake_df) <- paste0("precip_pday_", 1:365)
write.csv("fake_df.csv")
df <- read.csv("fake_df.csv")
而且当然
df = pd.read_csv("fake_df.csv")
下面是部分的df
样子:
ddd.iloc[[1,2,3],[1,2, 365]
]
Out[58]:
precip_pday_1 precip_pday_2 precip_pday_365
1 -1.189000 -0.825324 0.300221
2 -1.045318 -1.092792 1.098239
3 1.429858 0.919119 -0.643524
它有一年中每一天的列(以及我真实数据集中的许多其他列,但我可以使用正则表达式将它们过滤掉)。
所需的输出是第 30 天到第 185 天的值的总和
解决方案
推荐阅读
- javascript - 无法从 shaderfrom 使着色器在three.js 上运行
- robotframework - Robot Framework - 在不同的设备文件上运行
- assembly - OllyDbg:“标签预期”问题
- google-apps-script - 如何为 onFormSubmit 授予我的 Google 脚本访问权限?
- php - laravel 5.6模型中如何定义三表关系
- javascript - 如何在 Selenium 或 Javascript 中模拟 mouseenter 事件?
- sqlite - 根据 SQLITE 中另一列的记录更新一列
- webpack - 使用 Webpack 生成具有资产相对路径的 HTML
- wpf - WPF ItemsControl DataTrigger EnterActions 动画未开始
- android - 不兼容的 Firebase 库