标签: split-apply-combine

python pandas,DF.groupby().agg(),agg()中的列引用

在一个具体问题上,假设我有一个DataFrame DF

     word  tag count
0    a     S    30
1    the   S    20
2    a     T    60
3    an    T    5
4    the   T    10 
Run Code Online (Sandbox Code Playgroud)

对于每个"单词",我想找到具有最多"计数"的"标签".所以回报就像是

     word  tag count
1    the   S    20
2    a     T    60
3    an    T    5
Run Code Online (Sandbox Code Playgroud)

我不关心计数列,或者订单/索引是原始的还是搞砸了.返回字典{ 'the':'S',...}就好了.

我希望我能做到

DF.groupby(['word']).agg(lambda x: x['tag'][ x['count'].argmax() ] )
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我无法访问列信息.

更抽象地说,agg(函数)中的函数看作什么?

顺便说一下,.agg()与.aggregate()相同吗?

非常感谢.

python group-by pandas split-apply-combine

42
推荐指数
2
解决办法
8万
查看次数

ddply +总结了在大量列中重复相同的统计函数

好的,快速连续的第二个R问题.

我的数据:

           Timestamp    St_01  St_02 ...
1 2008-02-08 00:00:00  26.020 25.840 ...
2 2008-02-08 00:10:00  25.985 25.790 ...
3 2008-02-08 00:20:00  25.930 25.765 ...
4 2008-02-08 00:30:00  25.925 25.730 ...
5 2008-02-08 00:40:00  25.975 25.695 ...
...
Run Code Online (Sandbox Code Playgroud)

基本上我通常会使用ddplysummarize计算合奏的组合(例如全年每小时的平均值).

在上面的例子中,我将创建一个类别,例如小时(例如strptime(data$Timestamp,"%H") -> data$hour,然后使用该类别ddply,比如ddply(data,"hour", summarize, St_01=mean(St_01), St_02=mean(St_02)...)按每个列的类别平均.

但这里是粘性的地方.我有超过40列要处理,我不准备将它们作为参数逐个输入summarize.我曾经在shell中编写一个循环来生成这个代码,但这不是程序员如何解决问题的呢?

所以祈祷告诉,有没有人有更好的方法来实现相同的结果,但更少的击键?

r idiomatic multiple-columns plyr split-apply-combine

23
推荐指数
2
解决办法
2万
查看次数

R:地理距离的拆分-应用-组合

我已经从人口普查局下载了美国所有城镇等的列表。这是一个随机样本:

dput(somewhere)
structure(list(state = structure(c(30L, 31L, 5L, 31L, 24L, 36L, 
13L, 21L, 6L, 10L, 31L, 28L, 10L, 5L, 5L, 8L, 23L, 11L, 34L, 
19L, 29L, 4L, 24L, 13L, 21L, 31L, 2L, 3L, 29L, 24L, 1L, 13L, 
15L, 10L, 11L, 33L, 35L, 8L, 11L, 12L, 36L, 28L, 9L, 31L, 8L, 
14L, 11L, 12L, 36L, 13L, 8L, 5L, 29L, 8L, 7L, 23L, 25L, 39L, 
16L, 28L, 10L, 29L, 26L, 8L, 32L, 40L, 28L, 23L, 37L, 31L, 18L, 
5L, 1L, 31L, 18L, 13L, …
Run Code Online (Sandbox Code Playgroud)

geocoding r list dataframe split-apply-combine

7
推荐指数
1
解决办法
443
查看次数

在`dplyr`输出中添加行

在传统中plyr,返回的行会自动添加到输出中,即使它们超过了该分组的输入行数:

set.seed(1)
dat <- data.frame(x=runif(10),g=rep(letters[1:5],each=2))
> ddply( dat, .(g), function(df) df[c(1,1,1,2),] )
            x g
1  0.26550866 a
2  0.26550866 a
3  0.26550866 a
4  0.37212390 a
5  0.57285336 b
6  0.57285336 b
7  0.57285336 b
8  0.90820779 b
9  0.20168193 c
10 0.20168193 c
11 0.20168193 c
12 0.89838968 c
13 0.94467527 d
14 0.94467527 d
15 0.94467527 d
16 0.66079779 d
17 0.62911404 e
18 0.62911404 e
19 0.62911404 e
20 0.06178627 e
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何做同样的事情dplyr.一些尝试:

dat …
Run Code Online (Sandbox Code Playgroud)

r split-apply-combine dplyr

6
推荐指数
1
解决办法
2994
查看次数

以编程方式在变量变量上调用group_by()

使用dplyr,我想通过一个我可以改变的变量来总结[sic](例如在循环或apply-style命令中).

直接输入名称可以正常工作:

library(dplyr)
ChickWeight %>% group_by( Chick, Diet ) %>% summarise( mw = mean( weight ) )
Run Code Online (Sandbox Code Playgroud)

但是group_by并没有写一个字符向量,所以传递结果更难.

v <- "Diet"
ChickWeight %>% group_by( c( "Chick", v ) ) %>% summarise( mw = mean( weight ) )
## Error
Run Code Online (Sandbox Code Playgroud)

我会发布一个解决方案,但很想知道其他人如何解决这个问题.

group-by r split-apply-combine dplyr

6
推荐指数
1
解决办法
336
查看次数

使用 Pandas GroupBy 找到每个组的一半

我需要使用 选择数据框的一半groupby,其中每个组的大小未知并且可能因组而异。例如:

       index  summary  participant_id
0     130599     17.0              13
1     130601     18.0              13
2     130603     16.0              13
3     130605     15.0              13
4     130607     15.0              13
5     130609     16.0              13
6     130611     17.0              13
7     130613     15.0              13
8     130615     17.0              13
9     130617     17.0              13
10     86789     12.0              14
11     86791      8.0              14
12     86793     21.0              14
13     86795     19.0              14
14     86797     20.0              14
15     86799      9.0              14
16     86801     10.0              14
20    107370      1.0              15
21 …
Run Code Online (Sandbox Code Playgroud)

python pandas split-apply-combine pandas-groupby

6
推荐指数
1
解决办法
796
查看次数

如何使用 dplyr 计算两个分组变量的加权平均值

我知道这一定非常简单,但是我很难找到正确的 dplyr 命令来执行此操作。假设我想按两个变量对数据集进行分组,然后总结每行的计数。为此,我们只需:

mtcars %>% group_by(cyl, mpg) %>% summarize(Count = n())
Run Code Online (Sandbox Code Playgroud)

这将产生27行的三个变量一个数据帧cylmpgCount。我接下来要做的是总结mpg三个cyl值中每一个的平均值。请记住,每行可能包含一个Count大于 1 的值,在计算平均值时必须考虑这一点。我的数据框应该有 3 行,每行 2 个变量cyl,并且Avg_mpg. 有人可以给我一个可以做到这一点的短代码夹头吗?先感谢您。

r weighted-average split-apply-combine dplyr summarize

6
推荐指数
1
解决办法
4129
查看次数

Pandas 多索引数据框将列中的第一行设置为 0

我在处理 Pandas 中的分组对象时遇到了一些麻烦。具体来说,我希望能够将列中的第一行设置为 0,同时保持其他行不变。

例如:

df = pd.DataFrame({'A': ['foo', 'bar', 'baz'] * 2,
                        'B': rand.randn(6),
                        'C': rand.rand(6) > .5})
Run Code Online (Sandbox Code Playgroud)

给我

    A         B      C
0  foo  1.624345  False
1  bar -0.611756   True
2  baz -0.528172  False
3  foo -1.072969   True
4  bar  0.865408  False
5  baz -2.301539   True
Run Code Online (Sandbox Code Playgroud)

我将它们按 A 分组并按 B 对它们进行排序:

f = lambda x: x.sort('B', ascending=True)
sort_df = df.groupby('A',sort=False).apply(f)
Run Code Online (Sandbox Code Playgroud)

得到这个:

         A         B      C
    A                          
foo 3  foo -1.072969   True
    0  foo  1.624345  False
bar 1  bar -0.611756   True …
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas split-apply-combine

5
推荐指数
1
解决办法
2478
查看次数

通过复制规范化数据

注意:这个问题的确是一个重复的分离pandas数据帧字符串条目到单独的行,但这里提供的答案更通用和信息丰富,所以在所有方面到期,我选择不删除线程


我有一个'数据集',格式如下:

     id | value | ...
--------|-------|------
      a | 156   | ...
    b,c | 457   | ...
e,g,f,h | 346   | ...
    ... | ...   | ...
Run Code Online (Sandbox Code Playgroud)

我想通过复制每个ID的所有值来规范化它:

     id | value | ...
--------|-------|------
      a | 156   | ...
      b | 457   | ...
      c | 457   | ...
      e | 346   | ...
      g | 346   | ...
      f | 346   | ...
      h | 346   | ...
    ... | ...   | ...
Run Code Online (Sandbox Code Playgroud)

我正在做的是应用split-apply-combine pandas使用原则,为每个组 …

python pandas split-apply-combine

5
推荐指数
1
解决办法
594
查看次数

将 groupby 与扩展和自定义函数一起使用

我有一个由 truthIds 和 trackIds 组成的数据框:

truthId = ['A', 'A', 'B', 'B', 'C', 'C', 'A', 'C', 'B', 'A', 'A', 'C', 'C']
trackId = [1, 1, 2, 2, 3, 4, 5, 3, 2, 1, 5, 4, 6]
df1 = pd.DataFrame({'truthId': truthId, 'trackId': trackId})
    trackId truthId
0         1       A
1         1       A
2         2       B
3         2       B
4         3       C
5         4       C
6         5       A
7         3       C
8         2       B
9         1       A
10        5       A
11        4       C
12 …
Run Code Online (Sandbox Code Playgroud)

python lambda pandas split-apply-combine pandas-groupby

5
推荐指数
1
解决办法
1388
查看次数