标签: group-by

Python Pandas如何将groupby操作结果分配回父数据帧中的列?

我在IPython中有以下数据框,其中每一行都是一个股票:

In [261]: bdata
Out[261]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 21210 entries, 0 to 21209
Data columns:
BloombergTicker      21206  non-null values
Company              21210  non-null values
Country              21210  non-null values
MarketCap            21210  non-null values
PriceReturn          21210  non-null values
SEDOL                21210  non-null values
yearmonth            21210  non-null values
dtypes: float64(2), int64(1), object(4)
Run Code Online (Sandbox Code Playgroud)

我想应用groupby操作来计算"年度"列中每个日期的所有内容的上限加权平均回报.

这按预期工作:

In [262]: bdata.groupby("yearmonth").apply(lambda x: (x["PriceReturn"]*x["MarketCap"]/x["MarketCap"].sum()).sum())
Out[262]:
yearmonth
201204      -0.109444
201205      -0.290546
Run Code Online (Sandbox Code Playgroud)

但后来我希望将这些值"广播"回原始数据框中的索引,并将它们保存为日期匹配的常量列.

In [263]: dateGrps = bdata.groupby("yearmonth")

In [264]: dateGrps["MarketReturn"] = dateGrps.apply(lambda x: (x["PriceReturn"]*x["MarketCap"]/x["MarketCap"].sum()).sum())
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last) …
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas

66
推荐指数
4
解决办法
6万
查看次数

GroupBy pandas DataFrame并选择最常见的值

我有一个包含三个字符串列的数据框.我知道第3列中唯一的一个值对前两个的每个组合都有效.要清理数据,我必须按数据框前两列进行分组,并为每个组合选择第三列的最常见值.

我的代码:

import pandas as pd
from scipy import stats

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
                  'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
                  'Short name' : ['NY','New','Spb','NY']})

print source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])
Run Code Online (Sandbox Code Playgroud)

最后一行代码不起作用,它说"键错误'短名称'",如果我尝试仅按城市分组,那么我得到一个AssertionError.我该怎么办呢?

python group-by mode pandas pandas-groupby

66
推荐指数
8
解决办法
6万
查看次数

data.table中的.EACHI?

我似乎无法找到关于究竟.EACHI做什么的任何文档data.table.我在文档中看到它的简要提及:

在i和设置中传递这些组时,已知组子集的聚合特别有效by=.EACHI.何时i是data.table,DT[i,j,by=.EACHI]评估连接中每一行j的组.我们称之为每个i的分组.DTi

但是,"群体"在上下文中DT是什么意思?是否由设置的密钥确定的组DT?该组是否每个使用所有列作为键的不同行?我完全理解如何运行类似DT[i,j,by=my_grouping_variable]但是如何.EACHI工作的困惑.有人可以解释一下吗?

performance group-by r data.table

63
推荐指数
1
解决办法
1万
查看次数

GROUP BY - 不分组NULL

我试图找出一种通过使用group by函数返回结果的方法.

GROUP BY按预期工作,但我的问题是:是否可以通过忽略NULL字段组.因此它不会将NULL组合在一起,因为我仍然需要指定字段为NULL的所有行.

SELECT `table1`.*, 
    GROUP_CONCAT(id SEPARATOR ',') AS `children_ids`
FROM `table1` 
WHERE (enabled = 1) 
GROUP BY `ancestor` 
Run Code Online (Sandbox Code Playgroud)

所以现在让我说我有5行,祖先字段是NULL,它返回我的行....但我想要所有5行.

mysql sql group-by

62
推荐指数
5
解决办法
7万
查看次数

Python:根据pandas数据帧中的两列(变量)获取频率计数

您好我有以下数据帧.

    Group           Size

    Short          Small
    Short          Small
    Moderate       Medium
    Moderate       Small
    Tall           Large
Run Code Online (Sandbox Code Playgroud)

我想计算同一行在数据帧中出现的时间的频率.

    Group           Size      Time

    Short          Small        2
    Moderate       Medium       1 
    Moderate       Small        1
    Tall           Large        1
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas

62
推荐指数
3
解决办法
6万
查看次数

Linq按顺序分组,每组按顺序排序?

我有一个看起来像这样的对象:

public class Student
{
    public string Name { get; set; } 
    public int Grade { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想创建以下查询:按学生姓名分组成绩,按成绩对每个学生组进行排序,并按每组中的最高成绩对订单组进行排序.

所以它看起来像这样:

A 100
A 80
B 80
B 50
B 40
C 70
C 30
Run Code Online (Sandbox Code Playgroud)

我创建了以下查询:

StudentsGrades.GroupBy(student => student.Name)
    .OrderBy(studentGradesGroup => studentGradesGroup.Max(student => student.Grade));
Run Code Online (Sandbox Code Playgroud)

但是返回IEnumerable IGrouping,我无法对列表进行排序,除非我在另一个foreach查询中执行此操作并使用将结果添加到其他列表AddRange.

有更漂亮的方法吗?

c# linq group-by sql-order-by

61
推荐指数
4
解决办法
12万
查看次数

如何按多列对data.table进行分组?

我正在使用该data.table软件包来加速数据集上的一些摘要统计收集.

我很好奇是否有一种方法可以按多列分组.我的数据如下:

  purchaseAmt        adShown        url
   15.54            00001         150000001
    4.82            00002         150000001
  157.99            05005         776300044
   ...               ...            ...
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

adShownMedian <- df1[,median(purchaseAmt),by="adShown"]
Run Code Online (Sandbox Code Playgroud)

获得每个广告的中位数.我怎么会做一些结合adShownurl

我试过这个:

adShownMedian <- df1[,median(purchaseAmt),by=c("adShown","url")]
Run Code Online (Sandbox Code Playgroud)

但没有运气.

有什么建议?

group-by r data.table

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

GROUP BY没有聚合函数

我试图理解没有聚合函数的GROUP BY (新的oracle dbms).
它是如何运作的?
这是我尝试过的.

我将运行我的SQL的EMP表.
EMP表

SELECT ename , sal
FROM emp
GROUP BY ename , sal
Run Code Online (Sandbox Code Playgroud)

结果

SELECT ename , sal  
FROM emp  
GROUP BY ename;  
Run Code Online (Sandbox Code Playgroud)

结果

ORA-00979:不是GROUP BY表达式
00979. 00000 - "不是GROUP BY表达式"
*原因:
*操作:行
错误:397列:16

SELECT ename , sal  
FROM emp  
GROUP BY sal;  
Run Code Online (Sandbox Code Playgroud)

结果

ORA-00979:不是GROUP BY表达式
00979. 00000 - "不是GROUP BY表达式"
*原因:
*操作:行错误:411列:8

SELECT empno , ename , sal  
FROM emp  
GROUP BY sal , ename;  
Run Code Online (Sandbox Code Playgroud)

结果

ORA-00979:不是GROUP BY表达式
00979. 00000 - "不是GROUP BY表达式"
*原因: …

sql oracle group-by aggregate-functions

60
推荐指数
6
解决办法
13万
查看次数

如何为MySQL中的每个组选择第一行?

在C#中它会是这样的:

table
   .GroupBy(row => row.SomeColumn)
   .Select(group => group
       .OrderBy(row => row.AnotherColumn)
       .First()
   )
Run Code Online (Sandbox Code Playgroud)

Linq-To-Sql将其转换为以下T-SQL代码:

SELECT [t3].[AnotherColumn], [t3].[SomeColumn]
FROM (
    SELECT [t0].[SomeColumn]
    FROM [Table] AS [t0]
    GROUP BY [t0].[SomeColumn]
    ) AS [t1]
OUTER APPLY (
    SELECT TOP (1) [t2].[AnotherColumn], [t2].[SomeColumn]
    FROM [Table] AS [t2]
    WHERE (([t1].[SomeColumn] IS NULL) AND ([t2].[SomeColumn] IS NULL))
      OR (([t1].[SomeColumn] IS NOT NULL) AND ([t2].[SomeColumn] IS NOT NULL)
        AND ([t1].[SomeColumn] = [t2].[SomeColumn]))
    ORDER BY [t2].[AnotherColumn]
    ) AS [t3]
ORDER BY [t3].[AnotherColumn]
Run Code Online (Sandbox Code Playgroud)

但它与MySQL不兼容.

mysql grouping group-by

59
推荐指数
10
解决办法
12万
查看次数

SQL:在选择不同的行时按一个字段中的最小值进行分组

这就是我想要做的.假设我有这张桌子:

id | record_date | other_cols
18 | 2011-04-03  | x
18 | 2012-05-19  | y
18 | 2012-08-09  | z
19 | 2009-06-01  | a
19 | 2011-04-03  | b
19 | 2011-10-25  | c
19 | 2012-08-09  | d
Run Code Online (Sandbox Code Playgroud)

对于每个id,我想选择包含最小record_date的行.所以我得到:

id | record_date | other_cols
18 | 2011-04-03  | x
19 | 2009-06-01  | a
Run Code Online (Sandbox Code Playgroud)

我在这个问题上看到的唯一解决方案是假设所有record_date条目都是不同的,但在我的数据中并非如此.使用带有两个条件的子查询和内部联接会给我一些id的重复行,这是我不想要的:

id | record_date | other_cols
18 | 2011-04-03  | x
19 | 2011-04-03  | b
19 | 2009-06-01  | a
Run Code Online (Sandbox Code Playgroud)

sql group-by max distinct min

59
推荐指数
3
解决办法
14万
查看次数