在这篇文章中,我们将带领您了解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)
- 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)
>>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 使用
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函数?
我想为每个使用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有什么区别
编辑: 我在np.nan
@ coldspeed,@ wen-ben,@
ALollz指出的字符串中犯的菜鸟错误。答案非常好,因此我不会删除此问题以保留这些答案。
原文:
我已经阅读了这个问题/答案[groupby.first()和groupby.head(1)有什么区别?
该答案说明差异在于处理NaN
价值上。但是,当我打电话给groupby
时as_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
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的相关知识,请在本站搜索。
本文标签: