如何迭代从.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()
懒惰地迭代(索引,值)元组
注意:这与问题中的数据不同,只是一个演示.
为了扩展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)
| 归档时间: |
|
| 查看次数: |
70157 次 |
| 最近记录: |