gpt4 book ai didi

python - 根据条件对数据帧进行排序,并通过动态分配给随机向量来返回所有组

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:29 25 4
gpt4 key购买 nike

例如:INPUT DATAFRAME 是:-

INPUT     group
4000 1
4000 1
2000 2
3000 3
2000 4
2000 4
2000 4

输出:- 动态分配给任何随机向量并生成输出为:-具有最大重复组数的第一个数据帧,具有重复组第二高元素的第二个数据帧,依此类推...

输出
1.首先

INPUT     group
2000 4
2000 4
2000 4

2.second

INPUT        group
4000 1
4000 1

3.第三

INPUT        group
2000 2

4.第四

INPUT        group
3000 3

用更简单的话来说——我想将数据帧分成一些组,在结果中我希望通过分配给一些变量来按升序排列所有组。到目前为止我试过的是这样的:

x<-setDT(df)[, group := rleid(df$INPUT)]

这将对组进行排序。我又尝试了一个命令,那就是:

y<-x[x$group == which.max(tabulate(x$group)), ] 

但这只返回具有最大重复组元素数的组。

最佳答案

我不确定您是否需要一次完成所有输出。但这里有一个想法可能会有所帮助。为此,我正在使用 dplyr 包。因此,首先让我重新创建您作为输入提供的数据集:

library(dplyr)
DF <- data.frame(INPUT = c(4000,4000,2000,3000,2000,2000,2000), group = c(1,1,2,3,4,4,4))
df <- tbl_df(DF)
df

输出

  INPUT group
(dbl) (dbl)
1 4000 1
2 4000 1
3 2000 2
4 3000 3
5 2000 4
6 2000 4
7 2000 4

现在我将创建一个辅助表,它会告诉我每个组有多少行,该表已经从最大到最小排序:

aux <- df %>% group_by(group) %>% summarise(n = n()) %>% arrange(-n)
aux

输出

  group     n
(dbl) (int)
1 4 3
2 1 2
3 2 1
4 3 1

所以我们看到第 4 组出现了 3 次,第 1 组出现了两次,依此类推。现在我可以轻松地从最大值到最小值“提取”我想要的组:

ymax <- df %>% filter(group == aux$group[1])
y2 <- df %>% filter(group == aux$group[2])
y3 <- df %>% filter(group == aux$group[3])
ymin <- df %>% filter(group == aux$group[4])

输出

ymax
INPUT group
(dbl) (dbl)
1 2000 4
2 2000 4
3 2000 4

y2
INPUT group
(dbl) (dbl)
1 4000 1
2 4000 1

y3
INPUT group
(dbl) (dbl)
1 2000 2

ymin
INPUT group
(dbl) (dbl)
1 3000 3

希望对您有所帮助。
我只想补充一点,您当然可以一次获得所有这些:

ylist <- lapply(1:nrow(aux), function(x) {filter(df, group == aux$group[x])})

输出

[[1]]
Source: local data frame [3 x 2]

INPUT group
(dbl) (dbl)
1 2000 4
2 2000 4
3 2000 4

[[2]]
Source: local data frame [2 x 2]

INPUT group
(dbl) (dbl)
1 4000 1
2 4000 1

[[3]]
Source: local data frame [1 x 2]

INPUT group
(dbl) (dbl)
1 2000 2

[[4]]
Source: local data frame [1 x 2]

INPUT group
(dbl) (dbl)
1 3000 3

关于python - 根据条件对数据帧进行排序,并通过动态分配给随机向量来返回所有组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com