2016-08-18 70 views
2

我有一個數據框與幾個類別,我想用groupby分別繪製每個類別。但是,第一類(或第一個圖)始終繪製兩次。熊貓groupby情節給出了第一個情節兩次

例如:

import pandas as pd 
    import numpy as np 
    import matplotlib.pyplot as plt 

    n = 100000 
    x = np.random.standard_normal(n) 
    y1 = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n) 
    y2 = 1.0 + 5.0 * x + 2.0 * np.random.standard_normal(n) 

    df1 = pd.DataFrame({"A": x, 
         "B": y1}) 

    df2 = pd.DataFrame({"A": x, 
         "B": y2}) 

    df1["Cat"] = "Cat1" 
    df2["Cat"] = "Cat2" 

    df = df1.append(df2, ignore_index=True) 

    df.groupby("Cat").plot.hexbin(x="A", y="B",cmap = "jet") 
    plt.show() 

這會給我的三幅地塊,其中CAT1繪製兩次。

我只想要兩塊地塊。我究竟做錯了什麼?

+1

這可能與'apply'兩次執行有關:http://stackoverflow.com/questions/21390035/python-pandas-groupby-object-apply-method-duplicates-first-group,解決這個問題我' d得到個人小組並且遍歷小組並且繪製他們 – EdChum

+0

好吧,非常感謝!我將避免迭代組,但如果這是正常行爲,那麼就沒關係 – petetheat

回答

1

這是正常現象,請參閱docs警告:

警告:在目前的實現所適用的呼叫FUNC第一組的兩倍,以決定其是否可以採取快或慢的代碼路徑。這可能會導致意想不到的行爲,如果func有副作用,因爲它們將對第一組生效兩次。

在你的情況下,plot函數被調用兩次,這在結果中是可見的。