标签: pandas-groupby

熊猫:在每组中按平均值填充缺失值

这应该是直截了当的,但我发现的最接近的是这篇文章: 熊猫:填写组内的缺失值,我仍然无法解决我的问题....

假设我有以下数据帧

df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 3, 1, 3, np.nan, 3], 'name': ['A','A', 'B','B','B','B', 'C','C','C']})

  name  value
0    A      1
1    A    NaN
2    B    NaN
3    B      2
4    B      3
5    B      1
6    C      3
7    C    NaN
8    C      3
Run Code Online (Sandbox Code Playgroud)

并且我想在每个"名称"组中填写"NaN",其中包含平均值

      name  value
0    A      1
1    A      1
2    B      2
3    B      2
4    B      3
5    B      1
6    C      3
7    C      3
8    C      3
Run Code Online (Sandbox Code Playgroud)

我不确定去哪里: …

python pandas imputation fillna pandas-groupby

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

Python Pandas使用Groupby()创建新列.Sum()

尝试使用groupby计算创建新列.在下面的代码中,我得到了每个日期的正确计算值(参见下面的组),但是当我尝试用它创建一个新列(df ['Data4'])时,我得到了NaN.因此,我尝试在数据框中创建一个新列,其中包含所有日期的"Data3"总和,并将其应用于每个日期行.例如,2015-05-08分为2行(总数为50 + 5 = 55),在这个新列中,我想在两行中都有55行.

import pandas as pd
import numpy as np
from pandas import DataFrame

df = pd.DataFrame({'Date': ['2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05', '2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05'], 'Sym': ['aapl', 'aapl', 'aapl', 'aapl', 'aaww', 'aaww', 'aaww', 'aaww'], 'Data2': [11, 8, 10, 15, 110, 60, 100, 40],'Data3': [5, 8, 6, 1, 50, 100, 60, 120]})

group = df['Data3'].groupby(df['Date']).sum()

df['Data4'] = group
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

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

将min()与groupby一起使用时,保留其他列

我正在使用groupbypandas数据帧删除所有没有特定列的最小行.像这样的东西:

df1 = df.groupby("item", as_index=False)["diff"].min()
Run Code Online (Sandbox Code Playgroud)

但是,如果我有超过这两列,则其他列将被删除.我可以使用groupby保留这些列,还是我必须找到一种不同的方法来删除行?

我的数据如下:

    item    diff   otherstuff
   0   1       2            1
   1   1       1            2
   2   1       3            7
   3   2      -1            0
   4   2       1            3
   5   2       4            9
   6   2      -6            2
   7   3       0            0
   8   3       2            9
Run Code Online (Sandbox Code Playgroud)

并应该最终像:

    item   diff  otherstuff
   0   1      1           2
   1   2     -6           2
   2   3      0           0
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

    item   diff
   0   1      1           
   1   2     -6           
   2   3      0                 
Run Code Online (Sandbox Code Playgroud)

我一直在查看文档,找不到任何东西.我试过了:

df1 = df.groupby(["item", …
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas pandas-groupby

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

按照pandas数据框分组,然后在每个组中选择最新的

如何对pandas数据帧的值进行分组并从每个组中选择最新的(按日期)?

例如,给定按日期排序的数据框:

    id     product   date
0   220    6647     2014-09-01 
1   220    6647     2014-09-03 
2   220    6647     2014-10-16
3   826    3380     2014-11-11
4   826    3380     2014-12-09
5   826    3380     2015-05-19
6   901    4555     2014-09-01
7   901    4555     2014-10-05
8   901    4555     2014-11-01
Run Code Online (Sandbox Code Playgroud)

按ID或产品分组,并选择最早的给出:

    id     product   date
2   220    6647     2014-10-16
5   826    3380     2015-05-19
8   901    4555     2014-11-01
Run Code Online (Sandbox Code Playgroud)

python group-by pandas pandas-groupby

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

Python - GroupBy对象的滚动函数

我有一个grouped类型的时间序列对象<pandas.core.groupby.SeriesGroupBy object at 0x03F1A9F0>.grouped.sum()给出了期望的结果,但我无法使用rolling_sum来处理groupby对象.有没有办法将滚动功能应用于groupby对象?例如:

x = range(0, 6)
id = ['a', 'a', 'a', 'b', 'b', 'b']
df = DataFrame(zip(id, x), columns = ['id', 'x'])
df.groupby('id').sum()
id    x
a    3
b   12
Run Code Online (Sandbox Code Playgroud)

但是,我希望有类似的东西:

  id  x
0  a  0
1  a  1
2  a  3
3  b  3
4  b  7
5  b  12
Run Code Online (Sandbox Code Playgroud)

python pandas rolling-computation rolling-sum pandas-groupby

40
推荐指数
3
解决办法
4万
查看次数

如何获取pandas中groupby对象中的组数?

这将是有用的,所以我知道有多少我必须执行计算的唯一组.谢谢.

假设调用groupby对象dfgroup.

python group-by dataframe pandas pandas-groupby

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

Python pandas groupby对象apply方法重复第一组

我的第一个问题:我对pandas(0.12.0-4)中groupby的apply方法的这种行为感到困惑,它似乎将函数TWICE应用于数据帧的第一行.例如:

>>> from pandas import Series, DataFrame
>>> import pandas as pd
>>> df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})
>>> print(df)
   class  count  
0     A      1  
1     B      0    
2     C      2
Run Code Online (Sandbox Code Playgroud)

我首先检查groupby函数是否正常,看起来没问题:

>>> for group in df.groupby('class', group_keys = True):
>>>     print(group)
('A',   class  count
0     A      1)
('B',   class  count
1     B      0)
('C',   class  count
2     C      2)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在groupby对象上使用apply做类似的事情,我得到第一行输出两次:

>>> def checkit(group):
>>>     print(group)
>>> df.groupby('class', group_keys = True).apply(checkit)
  class  count
0     A      1
  class  count …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas pandas-groupby

37
推荐指数
2
解决办法
8021
查看次数

熊猫:有什么相当于SQL组?

使用groupby和并行的最有效方法是在pandas中应用过滤器?

基本上我要求SQL中的等价物

select *
...
group by col_name
having condition
Run Code Online (Sandbox Code Playgroud)

我认为有很多用例,包括条件均值,总和,条件概率等,这些都会使这样的命令非常强大.

我需要一个非常好的性能,所以理想情况下这样的命令不会是在python中完成的几个分层操作的结果.

python pandas pandas-groupby

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

Groupby值计入数据帧pandas

我有以下数据帧:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])
Run Code Online (Sandbox Code Playgroud)

我把它通过想组idgroup并计算每个词的数量为这个ID,组对.

所以最后我会得到这样的东西:

在此输入图像描述

通过循环遍历所有行df.iterrows()并创建新数据帧,我能够实现我想要的目标,但这显然效率低下.(如果有帮助,我事先知道所有术语的列表,其中有~10个).

看起来我必须分组然后计算值,所以我尝试使用df.groupby(['id', 'group']).value_counts()哪个不起作用,因为value_counts在groupby系列而不是数据帧上运行.

无论如何,我可以实现这一点而不循环?

python crosstab dataframe pandas pandas-groupby

35
推荐指数
5
解决办法
4万
查看次数

如何在多个groupby之后将pandas数据从索引移动到列

我有以下pandas数据帧:

dfalph.head()

token    year    uses  books
  386   xanthos  1830    3     3
  387   xanthos  1840    1     1
  388   xanthos  1840    2     2
  389   xanthos  1868    2     2
  390   xanthos  1875    1     1
Run Code Online (Sandbox Code Playgroud)

我使用重复令牌聚合行,并且如下所示:

dfalph = dfalph[['token','year','uses','books']].groupby(['token', 'year']).agg([np.sum])
dfalph.columns = dfalph.columns.droplevel(1)
dfalph.head()

               uses  books
token    year       
xanthos  1830    3     3
         1840    3     3
         1867    2     2
         1868    2     2
         1875    1     1
Run Code Online (Sandbox Code Playgroud)

我没有在索引中使用'token'和'year'字段,而是希望将它们返回到列并具有整数索引.

python multi-index pandas pandas-groupby

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