GVKun编程网logo

python groupby行为?(python groupby agg)

15

在这篇文章中,我们将带领您了解pythongroupby行为?的全貌,包括pythongroupbyagg的相关情况。同时,我们还将为您介绍有关2018.03.28python-pandasgroup

在这篇文章中,我们将带领您了解python groupby行为?的全貌,包括python groupby agg的相关情况。同时,我们还将为您介绍有关2018.03.28 python-pandas groupby 使用、ARIMA与Python中的groupby函数、as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别、Python - itertools.groupby的知识,以帮助您更好地理解这个主题。

本文目录一览:

python groupby行为?(python groupby agg)

python groupby行为?(python groupby agg)

>>from itertools import groupby>>keyfunc = lambda x : x > 500>>obj = dict(groupby(range(1000), keyfunc))>>list(obj[True])[999]>>list(obj[False])[]

__默认情况下,条件(x > 500)的 范围(1000) 显然是排序的。
我期待的数字0到999在一个被分组 的dict 由条件(X> 500)。但是结果字典只有999个
。其他数字在哪里?任何人都可以解释这里发生了什么吗?

答案1

小编典典

从文档:

返回的组本身就是一个与共享底层可迭代对象的迭代器groupby()。因为源是共享的,所以当groupby()对象前进时,先前的组将不再可见。因此,如果以后需要该数据,则应将其存储为列表[。]。

并且您将迭代器存储在其中obj并在以后实现。

In [21]: dict((k, list(g)) for k, g in groupby(range(10), lambda x : x > 5))Out[21]: {False: [0, 1, 2, 3, 4, 5], True: [6, 7, 8, 9]}

2018.03.28 python-pandas groupby 使用

2018.03.28 python-pandas groupby 使用

groupby 分组统计

1. 根据某些条件将数据分组

2. 对每个组独立应用函数

3. 将结果合并到一个数据结构中

Dataframe 在行或列上分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终的结果对象中

#分组
import numpy as np
import pandas as pd
df = pd.DataFrame({''A'':[''foo'',''bar'',''foo'',''bar'',''foo'',''bar'',''foo'',''foo''], ''B'':[''one'',''one'',''two'',''three'',''two'',''two'',''one'',''three''], ''C'':np.random.randn(8), ''D'':np.random.randn(8)}) print(df) print(''------'') print(df.groupby(''A''),type(df.groupby(''A''))) #直接分组得到的是groupby对象,是一个中间数据,没有进行计算 print(df.groupby(''A'').sum())#自动过滤字符串列 print(df.groupby(''A'').mean())#平均值 b = df.groupby([''A'',''B'']).mean() print(b,type(b),''\n'',b.columns) c = df.groupby([''A''])[''D''].mean()#以A分组,取D列平均值 print(c,type(c),''\n'')

结果:
     A      B         C         D
0  foo    one  0.429615 -0.708782
1  bar    one  0.891751  1.140575
2  foo    two -0.261858 -0.516835
3  bar  three  1.310361  0.269657
4  foo    two  1.048076  1.374218
5  bar    two -0.410148  1.061132
6  foo    one -1.124137 -0.729367
7  foo  three  0.289513  0.892714
------
<pandas.core.groupby.DataFrameGroupBy object at 0x000000000FBACA58> <class ''pandas.core.groupby.DataFrameGroupBy''>
            C         D
A                     
bar  1.791963  2.471364
foo  0.381208  0.311947
            C         D
A                     
bar  0.597321  0.823788
foo  0.076242  0.062389
                  C         D
A   B                       
bar one    0.891751  1.140575
    three  1.310361  0.269657
    two   -0.410148  1.061132
foo one   -0.347261 -0.719074
    three  0.289513  0.892714
    two    0.393109  0.428691 <class ''pandas.core.frame.DataFrame''>
Index([''C'', ''D''], dtype=''object'')
A
bar    0.823788
foo    0.062389
Name: D, dtype: float64 <class ''pandas.core.series.Series''>

#分组 - 可迭代的对象
df = pd.DataFrame({''X'':[''A'',''B'',''A'',''B''],''Y'':[1,3,4,2]})
print(df)
print(df.groupby(''X''),type(df.groupby(''X'')))
print(''-------'')
print(list(df.groupby(''X'')),''->可迭代对象,直接生成list\n'')
print(list(df.groupby(''X''))[0],''->以元组的形式显示'')
for n,g in df.groupby(''X''):
    print(n)
    print(g)
    print(''###'')
print(''--------'')
#n是组名,g是分组后的DataFrame
print(df.groupby([''X'']).get_group(''A''),''\n'')
print(df.groupby([''X'']).get_group(''B''),''\n'')
#.get_group提取分组后的组

grouped = df.groupby([''X''])
print(grouped.groups)
print(grouped.groups[''A''])#也可写 df.groupby(''X'').groups[''A'']
print(''-------'')
#.groups:将分组后的groups转化为dict
#可以字典索引方法来查看groups里的元素

sz = grouped.size()
print(sz,type(sz))
#.size() 查看分组后的长度
print(''---------'')
df = pd.DataFrame({''A'':[''foo'',''bar'',''foo'',''bar'',''foo'',''bar'',''foo'',''foo''],
                   ''B'':[''one'',''one'',''two'',''three'',''two'',''two'',''one'',''three''],
                   ''C'':np.random.randn(8),
                   ''D'':np.random.randn(8)})
grouped = df.groupby([''A'',''B'']).groups
print(df)
print(grouped)
print(grouped[''foo'',''three''])

dic=dict({''A'':[1,2,3],
       ''B'':[2,3,4]})
print(dic,type(dic))

结果:
   X  Y
0  A  1
1  B  3
2  A  4
3  B  2
<pandas.core.groupby.DataFrameGroupBy object at 0x000000000F889F60> <class ''pandas.core.groupby.DataFrameGroupBy''>
-------
[(''A'',    X  Y
0  A  1
2  A  4), (''B'',    X  Y
1  B  3
3  B  2)] -> 可迭代对象,直接生成 list

(''A'',    X  Y
0  A  1
2  A  4) -> 以元组的形式显示
A
   X  Y
0  A  1
2  A  4
###
B
   X  Y
1  B  3
3  B  2
###
--------
   X  Y
0  A  1
2  A  4

   X  Y
1  B  3
3  B  2

{''A'': Int64Index([0, 2], dtype=''int64''), ''B'': Int64Index([1, 3], dtype=''int64'')}
Int64Index([0, 2], dtype=''int64'')
-------
X
A    2
B    2
dtype: int64 <class ''pandas.core.series.Series''>
---------
     A      B         C         D
0  foo    one -0.881923 -0.825102
1  bar    one -0.626412 -0.618638
2  foo    two -1.741248  1.557698
3  bar  three  1.076928  1.738265
4  foo    two -0.954103 -0.741415
5  bar    two  1.224841 -0.479472
6  foo    one  0.680046 -0.476137
7  foo  three -1.519952 -0.421738
{(''bar'', ''one''): Int64Index([1], dtype=''int64''), (''bar'', ''three''): Int64Index([3], dtype=''int64''), (''bar'', ''two''): Int64Index([5], dtype=''int64''), (''foo'', ''one''): Int64Index([0, 6], dtype=''int64''), (''foo'', ''three''): Int64Index([7], dtype=''int64''), (''foo'', ''two''): Int64Index([2, 4], dtype=''int64'')}
Int64Index([7], dtype=''int64'')
{''A'': [1, 2, 3], ''B'': [2, 3, 4]} <class ''dict''>

#其他轴上分组
df = pd.DataFrame({''data1'':np.random.randn(2),
                   ''data2'':np.random.randn(2),
                   ''key1'':[''a'',''b''],
                   ''key2'':[''one'',''two'']})
print(df)
print(df.dtypes)
print(''--------'')
for n,p in df.groupby(df.dtypes,axis=1):
    print(n)
    print(p)
    print(''##'')
#按照值类型分组,分为2组

结果:
      data1     data2 key1 key2
0  0.813374  0.232957    a  one
1 -0.213256  1.393156    b  two
data1    float64
data2    float64
key1      object
key2      object
dtype: object
--------
float64
      data1     data2
0  0.813374  0.232957
1 -0.213256  1.393156
##
object
  key1 key2
0    a  one
1    b  two
##

#通过字典或者Series分组
df = pd.DataFrame(np.arange(16).reshape(4,4),
                 columns = [''a'',''b'',''c'',''d''])
print(df)
print(''-------'')

mapping = {''a'':''one'',''b'':''one'',''c'':''two'',''d'':''two'',''e'':''three''}
print(mapping)
by_column = df.groupby(mapping,axis = 1)
print(by_column.sum())
print(''---------'')
#mapping中 a,b列对应为one,c,d列对应为two,以字典为分组

s=pd.Series(mapping)
print(s)
print(s.groupby(s).count())
#s中,index = a,b对应的是one;c,d对应的是two,以Series来分组

结果:
    a   b   c   d
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
-------
{''a'': ''one'', ''b'': ''one'', ''c'': ''two'', ''d'': ''two'', ''e'': ''three''}
   one  two
0    1    5
1    9   13
2   17   21
3   25   29
---------
a      one
b      one
c      two
d      two
e    three
dtype: object
one      2
three    1
two      2
dtype: int64

 

ARIMA与Python中的groupby函数

ARIMA与Python中的groupby函数

如何解决ARIMA与Python中的groupby函数?

我想为每个使用pmdarina的客户端预测TimeSeries数据。 有大量的帐户,每个帐户都有大量的交易。我可以轻松地使用数据来预测所有帐户中的单个值:

`fit = pm.auto_arima(df_edit.amount_usd,seasonal=True,stepwise=True,error_action="ignore",m=12,max_order=6)
print(fit.summary())

months_to_predict = 1
predicted = fit.predict(months_to_predict)`

但是,当我尝试仅使用groupby根据与该帐户关联的交易数据来预测每个单独的帐户时,出现以下错误:ValueError:设置具有序列的数组元素。

`fit = pm.auto_arima(df_edit.groupby(''account_id'')[''amount_usd''],max_order=6)
print(fit.summary())`

是否可以通过arima使用groupby,还是需要一个循环来为每个帐户运行模型?

更新:我编写了一个循环,以通过Arima模型预测进行多次迭代,但现在遇到了围绕maxlag的值错误,“ ValueError:所有直至''maxlag''的滞后值都产生了奇异矩阵。请考虑使用更长的序列,不同的滞后项或不同的测试。”

    act = []
filters = []
predictions = []
for i in range(128):
    a = df_edit[''accounts'']==i
#    act.append(a)
    b = df_edit[a]
#    filters.append(b)
    c = pm.auto_arima(b.amount_usd,max_order=6)

    months_to_predict = 1
    d = c.predict(months_to_predict)
    predictions.append(d)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

编辑: 我在np.nan@ coldspeed,@ wen-ben,@
ALollz指出的字符串中犯的菜鸟错误。答案非常好,因此我不会删除此问题以保留这些答案。

原文:
我已经阅读了这个问题/答案[groupby.first()和groupby.head(1)有什么区别?

该答案说明差异在于处理NaN价值上。但是,当我打电话给groupbyas_index=False,他们俩都选择了NaN

此外,Pandas具有groupby.nth与和类似的功能head,并且first

有什么差异groupby.first(),groupby.nth(0),groupby.head(1)as_index=False

下面的例子:

In [448]: df
Out[448]:
   A       B
0  1  np.nan
1  1       4
2  1      14
3  2       8
4  2      19
5  2      12

In [449]: df.groupby('A',as_index=False).head(1)
Out[449]:
   A       B
0  1  np.nan
3  2       8

In [450]: df.groupby('A',as_index=False).first()
Out[450]:
   A       B
0  1  np.nan
1  2       8

In [451]: df.groupby('A',as_index=False).nth(0)
Out[451]:
   A       B
0  1  np.nan
3  2       8

我看到`firs()’重置了索引,而其他2则没有。除此之外,还有什么区别吗?

Python - itertools.groupby

Python - itertools.groupby

itertools.groupby 不是这样工作的。来自手册:

它会在每次键函数的值发生变化时生成一个中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序的原因)

所以要实现你想要的分组类型,你需要先对my_list进行排序:

import itertools

my_list = [
{'name': 'stock1','price': 200,'shares': 100},{'name': 'stock2','price': 1.2,'shares': 1000},{'name': 'stock3','price': 0.05,'shares': 200000},{'name': 'stock1','price': 200.2,'shares': 50}
]

my_list.sort(key=lambda x:x['name'])

by_name = { name: list(items) for name,items in itertools.groupby(
            my_list,key=lambda x: x['name'])}

print(by_name)

输出

{'stock1': [{'name': 'stock1','shares': 50}],'stock2': [{'name': 'stock2','shares': 1000}],'stock3': [{'name': 'stock3','shares': 200000}]
}

今天关于python groupby行为?python groupby agg的讲解已经结束,谢谢您的阅读,如果想了解更多关于2018.03.28 python-pandas groupby 使用、ARIMA与Python中的groupby函数、as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别、Python - itertools.groupby的相关知识,请在本站搜索。

本文标签: