基于正则表达式中定义的其他变量的总和来创建变量的一类代码?

时间:2018-08-15 20:58:04

标签: python r regex pandas

我对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天的值的总和

0 个答案:

没有答案