如何迭代从groupby()生成的Pandas系列.size()

Rei*_*rne 32 python pandas

如何迭代从.groupby('...').size()命令生成的Pandas Series 并获取组名和计数.

举个例子,如果我有:

foo
-1     7
 0    85
 1    14
 2     5
Run Code Online (Sandbox Code Playgroud)

我怎样才能循环它们以便每次迭代我会在变量中得到-1&7,0和85,1和14以及2和5?

我尝试了枚举选项,但它不太有用.例:

for i, row in enumerate(df.groupby(['foo']).size()):
    print(i, row)
Run Code Online (Sandbox Code Playgroud)

它不会返回-1,0,1和2,i而是返回0,1,2,3.

Psi*_*dom 55

更新:

给大熊猫系列:

s = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])

s
#a    1
#b    2
#c    3
#d    4
#dtype: int64
Run Code Online (Sandbox Code Playgroud)

您可以直接遍历它,在每次迭代中从系列中产生一个值:

for i in s:
    print(i)
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

如果要同时访问索引,可以使用items或者iteritems方法,它生成包含索引和值的生成器:

for i, v in s.items():
    print('index: ', i, 'value: ', v)
#index:  a value:  1
#index:  b value:  2
#index:  c value:  3
#index:  d value:  4

for i, v in s.iteritems():
    print('index: ', i, 'value: ', v)
#index:  a value:  1
#index:  b value:  2
#index:  c value:  3
#index:  d value:  4
Run Code Online (Sandbox Code Playgroud)

旧答案:

你可以iteritems()在系列上调用方法:

for i, row in df.groupby('a').size().iteritems():
    print(i, row)

# 12 4
# 14 2
Run Code Online (Sandbox Code Playgroud)

根据文件:

Series.iteritems()

懒惰地迭代(索引,值)元组

注意:这与问题中的数据不同,只是一个演示.

  • 这是我正在寻找的解决方案 - 谢谢.我曾尝试`.iterrows()`但它没有提供我想要的解决方案. (2认同)

dbo*_*ouz 5

为了扩展Psidom的答案,有三种有用的方法可以从pd.Series解包数据。具有与Psidom相同的系列:

s = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])

  • 直接循环s产生value每一行的。
  • 在每行对上循环 s.iteritems()s.items()产生一个元组(index,value)
  • 使用enumerate()on会s.iteritems()产生以下形式的嵌套元组:(rownum,(index,value))

如果您的索引包含行号本身以外的其他信息(例如,在索引为时间的时间序列的情况下),则最后一种方法很有用。

s = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])

for rownum,(indx,val) in enumerate(s.iteritems()):
    print('row number: ', rownum, 'index: ', indx, 'value: ', val)
Run Code Online (Sandbox Code Playgroud)

将输出:

row number:  0 index:  a value:  1
row number:  1 index:  b value:  2
row number:  2 index:  c value:  3
row number:  3 index:  d value:  4
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关解开嵌套元组的更多信息