Python 使用摘要数据创建dataframe

Python 使用摘要数据创建dataframe,python,r,bash,pandas,dplyr,Python,R,Bash,Pandas,Dplyr,我有一个大的数据框(数百万行x十几列),我想从中获取一些摘要数据。总体而言,如本例所示,我有多达800000个可能的“名称”,以及多达440个样本中的6个可能值 以下是我所拥有和想要的玩具示例: 起始表: Name Chr Pos Sample Value RS1 1 1000 S1 1 RS1 1 1000 S2 1 RS1 1 1000 S3 2 RS1 1 1000

我有一个大的数据框(数百万行x十几列),我想从中获取一些摘要数据。总体而言,如本例所示,我有多达800000个可能的“名称”,以及多达440个样本中的6个可能值

以下是我所拥有和想要的玩具示例:

起始表:

Name   Chr   Pos   Sample  Value
RS1    1     1000   S1      1
RS1    1     1000   S2      1    
RS1    1     1000   S3      2
RS1    1     1000   S4      3
RS1    1     1000   S5      1
RS1    1     1000   S6      2
我想要名称列中每个项目的每个值的比例。在本例中,共有6个样本,其中有3个可能的值。因此,我的输出是:

Name   Chr    Pos   Value   Proportion
RS1    1      1000   1      0.5
RS1    1      1000   2      0.33
RS1    1      1000   3      0.17

我愿意用R(dplyr?)或Python(使用base或pandas???)甚至bash脚本(如果有意义的话)来实现这一点。我正在寻找一些能节省时间和内存的东西。我对R有一定的熟练程度,但我正在开始学习Python以及它所能做的一切。

这不是一个更优雅的答案,但它对我很有用:

toy <- tbl_df(toy)
toy$Chr <- as.factor(toy$Chr)
toy$Pos <- as.factor(toy$Pos)
toy$Value <- as.factor(toy$Value)

df <- as.data.frame(toy %>% 
  group_by(Name, Chr, Pos, Value) %>% 
  tally %>% 
  group_by(Name, Value))

df %>% 
  mutate(pct = n/sum(n))

toy使用
plyr
。下面,
d
是起始表,
output
是结果

library(plyr)
output = ddply(d, "Name", function(x){
  tab = table(x$Value)/length(x$Value)
  prop = as.numeric(tab)
  val = names(tab)
  data.frame(Name = x$Name[1], Chr = x$Chr[1], Pos = x$Pos[1], Value = val, Proportion = prop)
})

你是在追求这个吗:如果是这样的话,我将关闭一个如此大的东西,R的
数据表,或者SQL。您可以使用
dplyr
轻松地完成此操作,但对于这种大小,它可能会很慢。我认为pandas答案会起作用。我正在尝试。显然,我查错了词。我担心R会被这么多的数据阻塞,或者速度非常慢,但如果我不能让熊猫工作,我会看看。我没有办法把它放到数据库中,这样我就可以使用SQL了,但那将是非常理想的。这对我在R中的一个较小的数据集上工作很有效,尽管速度很慢。我希望它在我的大数据集上仍然有效。谢谢