繁体   English   中英

应用size()之后如何在DataFrame Groupby上进行迭代?

[英]How do I iterate over DataFrame Groupby after applying size()?

通过日志文件组合,我建立了失败进程,日期和机器的数据框。 我的目标是为每个过程提供一个条形图,其中日期为x轴,每天的失败计数是使用.size()计算的。

grouped = fail_df.groupby(['Process', 'Date']).size
print(fail_df.groupby(['Process', 'Date']).size())

恰好显示了我想要的。 打印的第一行是

Process          Date
10HzTail         2019-06-16     1
1553Prox         2019-06-16     3
                 2019-06-17     8
                 2019-06-18    10
                 2019-06-19     2
                 2019-06-20     5
Cthread2         2019-06-18     1
                 2019-06-20     1

我尝试迭代为

for name, row in grouped:
    print(name)
    print(row)

给出此错误输出

dtype: int64
Traceback (most recent call last):
  File "./allpandas", line 140, in <module>
main()
 File "./allpandas", line 125, in main
  for name, row in grouped:
TypeError: 'int' object is not iterable

我想依次处理每个流程。 我希望将日期和计数反馈到该流程的条形图中。

有没有办法对此进行迭代,或者我在分组中犯了一个根本性的错误?

更新

我尝试了建议的size(),但仍然遇到相同的错误。

grouped = fail_df.groupby(['Process', 'Date']).size()
for name, row in grouped:
    print(name)
    print(row)

还有其他建议吗?

如果使用matplotlib,最快的解决方案

您正在使用matplotlib吗?
如果是这样,如果我理解了您想要的内容,则无需循环,可以使用pandas.DataFrame.plot为您完成所有工作。

grouped = fail_df.groupby(['Process', 'Date']).size()
axis = grouped.plot(kind='bar')
plt.show()

其中plt是通常的import matplotlib.pyplot as plt

如果标签太大,则可能需要将其固定在每个条的底部。

你的错误

您的错误来自于groupedSeries而不是DataFrame ,因此您不能以这种方式对其进行迭代。 迭代序列仅返回值。 你应该做:

for value in grouped:
    print(value)

查看尺寸,但是您丢失了索引标签。 要获得索引标签,解决方案是:

for name, row in zip(grouped.index, grouped):
    print(name)
    print(row)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM