如何从一列对应的值获取值

时间:2018-01-13 18:30:39

标签: python r dataframe

我有一个像这样的数据框

Action Stage
    a1     A
    a2     A
    a3     B
    a4     B

我希望得到像A=[a1,a2] and B=[a3,a4]

这样的价值

如何在R或python中完成?

4 个答案:

答案 0 :(得分:0)

R解决方案可能

library(dplyr)
df %>%
  group_by(Stage) %>%
  summarize(Val=paste0("[",paste(Action,collapse = ","),"]")) %>%
  rowwise() %>%
  mutate(desired_val = paste(Stage, Val, sep = "="))

输出是:

  Stage     Val desired_val
1     A [a1,a2]   A=[a1,a2]
2     B [a3,a4]   B=[a3,a4]


#sample data
> dput(df)
structure(list(Action = c("a1", "a2", "a3", "a4"), Stage = c("A", 
"A", "B", "B")), .Names = c("Action", "Stage"), class = "data.frame", row.names = c(NA, 
-4L))

答案 1 :(得分:0)

你可以这样做:

split(df$Stage)

该值将拆分为一个列表。

HTH

答案 2 :(得分:0)

如果我们使用来自Prems的数据对象回答(但是将其命名为dfrm以避免与名为df的函数混淆)以及使用来自Sofaine的split的想法(但使用Stage列作为第二个参数而不是第一个参数然后

(sdfrm <- split( dfrm$Action, dfrm$Stage))
$A
[1] "a1" "a2"

$B
[1] "a3" "a4"

> sdfrm$A
[1] "a1" "a2"

答案 3 :(得分:0)

在R中,使用您的示例:

Action <- c("a1","a2","a3","a4")
Stage <- c("A","A","B","B")
data <- data.frame(Action, Stage)

> u <- unique(Stage)
> v <- vector()
> for(i in 1:length(u)){
+   v[i] <- paste(data[which(data$Stage == u[i]),"Action"],collapse=",")
+ }
> d <- data.frame(u,v)
> d

  u     v
1 A a1,a2
2 B a3,a4