Python 如何基于现有列在数据集中提取和创建新列
我的数据集中2列的示例切片,稍后需要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的新列。它基于排名栏。我知道如何打印与每个城市相
**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中实现它,因为这是我的难点。