簡體   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