Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于现有列在数据集中提取和创建新列_Python_R_Regex - Fatal编程技术网

Python 如何基于现有列在数据集中提取和创建新列

Python 如何基于现有列在数据集中提取和创建新列,python,r,regex,Python,R,Regex,我的数据集中2列的示例切片,稍后需要 **City** **Ranking** Boston 9 of 2972 Boston 60 of 2972 Miami 6 of 1444 Miami 200 of 1444 Miami 3 of 1444 Miami 1 of 1444 我想创建一个名为individual.rank的新列。它基于排名栏。我知道如何打印与每个城市相

我的数据集中2列的示例切片,稍后需要

**City**    **Ranking**
 Boston        9  of 2972
 Boston        60 of 2972
 Miami         6  of 1444
 Miami         200 of 1444
 Miami          3  of 1444
 Miami          1  of 1444
我想创建一个名为individual.rank的新列。它基于排名栏。我知道如何打印与每个城市相关的数据行,我只需要知道如何提取以及如何执行individual.rank列。 结果应与迈阿密表格类似,例如:

**City**   **Ranking**  **individual.rank**
 Miami       1 of 1444          1
 Miami       2 of 1444          2
 Miami       3 of 1444          3
我可以对特定城市的排名进行排序:

MiamiTable = data.loc[data['City'] == 'Miami']
MiamiTable.sort_values('Ranking')
我在R中使用了我不理解的函数和正则表达式。但我不知道如何在Python中实现它。df.restaurant.data是数据集:

pattern <- "[0-9?,]+" # 
pattern.end <- "[0-9?,]+$"
df.restaurant.data <- df.restaurant.data %>%  
    mutate(individual.rank = str_replace(str_extract(Ranking, pattern),
                                         ",", "") %>% 
               as.numeric())
你在用熊猫吗?如果是这样,这似乎达到了你的目标

MiamiTable = data.loc[data['City'] == 'Miami']

MiamiTable['individual_rank'] = MiamiTable.Ranking.str.replace(r' .*', '').astype('int')
执行字符串替换以删除第一个空格之后的所有内容,然后将结果转换为整数。然后排序:

MiamiTable.sort_values('individual_rank')


    City      Ranking  individual_rank
5  Miami   1  of 1444                1
4  Miami   3  of 1444                3
2  Miami   6  of 1444                6
3  Miami  200 of 1444              200

您应该使用两个R包:tidyr和dplyr:

library(tidyr)
library(dplyr)

df <- tibble(City = c("Boston", "Boston", rep("Miami", 4)),
             Ranking = c("9  of 2972",
                         "60 of 2972",
                         "6  of 1444",
                         "200 of 1444",
                         "3  of 1444",
                         "1  of 1444"))

df %>% 
  separate(col = Ranking, into = c("individual.rank", "total"), 
           sep = "of", remove = FALSE) %>%
  mutate_at(vars("individual.rank"), as.integer) %>% 
  select(-total)

# A tibble: 6 x 3
  City   Ranking     individual.rank
  <chr>  <chr>                 <int>
1 Boston 9  of 2972                9
2 Boston 60 of 2972               60
3 Miami  6  of 1444                6
4 Miami  200 of 1444             200
5 Miami  3  of 1444                3
6 Miami  1  of 1444                1

你可以使用一个类似df$new_col的正则表达式,你需要一个既懂R的dplyr变体又懂Python的人。代码似乎只是使用正则表达式提取带有逗号的数字。为什么会这样?是在一个字符类中,这是一个难题。为什么用逗号将数字字符串传递给as.numeric应该在R中工作也是一个谜。我怀疑这是经过可靠测试的R代码。我的建议是:编辑你的问题,将所有的“I”大写,因为我们中的许多人认为这是懒惰和对读者缺乏尊重的表现,并删除从粗略的R代码中翻译的请求。通常问题需要一些代码,我可以粘贴并运行这些代码来复制你在任务中的进度或错误,否则,这是一个“做我的工作”的电话,这在StackOverflow没有得到广泛的认可。我只需要了解如何为迈阿密或任何其他城市创建一个表格,将我想要的新列和排名安排为上面发布的新表格。您可以忽略R代码片段,并尝试将重点放在如何在Python中实现它,因为这是我的难点。