首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中对pandas中的groupby结果执行函数?

如何在python中对pandas中的groupby结果执行函数?
EN

Stack Overflow用户
提问于 2013-01-29 01:02:27
回答 1查看 4.8K关注 0票数 3

我已经使用此代码计算了每个集群中每个用户的不同质量指标的值

代码语言:javascript
复制
>>> for name, group in df.groupby(["Cluster_id", "User"]):
...     print 'group name:', name
...     print 'group rows:'
...     print group
...     print 'counts of Quality values:'
...     print group["Quality"].value_counts()
...     raw_input()
...     

但是现在我得到的输出是

代码语言:javascript
复制
group rows:
                tag                       user                    quality  cluster
676    black fabric  http://steve.nl/user_1002          usefulness-useful        1
708      blond wood  http://steve.nl/user_1002          usefulness-useful        1
709      blond wood  http://steve.nl/user_1002    problematic-misspelling        1
1410         eames?  http://steve.nl/user_1002      usefulness-not_useful        1
1411         eames?  http://steve.nl/user_1002  problematic-misperception        1
3649  rocking chair  http://steve.nl/user_1002          usefulness-useful        1
3650  rocking chair  http://steve.nl/user_1002  problematic-misperception        1
counts of Quality Values:
usefulness-useful            3
problematic-misperception    2
usefulness-not_useful        1
problematic-misspelling      1

我现在想做的是有一个检查条件,即:

代码语言:javascript
复制
if quality==usefulness-useful:
 good = good + 1
else:
 bad = bad + 1

我试着写输出:

代码语言:javascript
复制
counts of Quality Values:
usefulness-useful            3
problematic-misperception    2
usefulness-not_useful        1
problematic-misspelling      1

转换为一个变量,并尝试逐行遍历该变量,但不起作用。有没有人能给我一些建议,关于如何对某些行进行计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-29 01:28:31

一旦获得了一个组,就可以使用.iterrows()方法逐行迭代。它为您提供了行索引和行本身:

代码语言:javascript
复制
In [33]: for row_number, row in group.iterrows():
   ....:     print row_number
   ....:     print row
   ....:     
676
Tag                        black fabric
User          http://steve.nl/user_1002
Quality               usefulness-useful
Cluster_id                            1
Name: 676
708
Tag                          blond wood
User          http://steve.nl/user_1002
Quality               usefulness-useful
Cluster_id                            1
Name: 708
[etc]

这些行中的每一行都可以像字典一样编入索引,例如:

代码语言:javascript
复制
In [48]: row
Out[48]: 
Tag                       rocking chair
User          http://steve.nl/user_1002
Quality       problematic-misperception
Cluster_id                            1
Name: 3650

In [49]: row["User"]
Out[49]: 'http://steve.nl/user_1002'

In [50]: row["Tag"]
Out[50]: 'rocking chair'

所以你可以像这样写你的循环

代码语言:javascript
复制
good = 0
bad = 0
for row_number, row in group.iterrows():
    if row['Quality'] == 'usefulness-useful':
        good += 1
    else:
        bad += 1
print 'good', good, 'bad', bad

这给了我们

代码语言:javascript
复制
good 3 bad 4

如果这对你有意义的话,这是一个非常好的方式。另一种方法是直接使用Quality列中的计数:

代码语言:javascript
复制
In [54]: counts = group["Quality"].value_counts()

In [55]: counts
Out[55]: 
usefulness-useful            3
problematic-misperception    2
usefulness-not_useful        1
problematic-misspelling      1

In [56]: counts['usefulness-useful']
Out[56]: 3

因为坏=完全好,所以我们有

代码语言:javascript
复制
In [57]: counts.sum() - counts['usefulness-useful']
Out[57]: 4
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14567210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档