2017-05-29 121 views
0

我試圖在大熊貓一個條形圖,有兩個數據系列從GROUPBY來:熊貓柱狀圖中

data.groupby(['popup','UID']).size().groupby(level=0).value_counts().unstack().transpose().plot(kind='bar', layout=(2,2)) 

x軸是不連續的,只能說明是在價值觀數據集。在這個例子中,它從11跳到13.

我怎樣才能讓它連續?

BarChart

**編輯2:**

我想強尼以數據爲中心的做法,它的作品。它創建了一個新的指數,沒有遺漏值:

temp = data.groupby(['popup','UID']).size().groupby(level=0).value_counts().unstack().transpose() 
temp.reindex(np.arange(temp.index.min(), temp.index.max())).plot(kind='bar', layout=(2,2)) 

Result

不過,我認爲應該用柱狀圖代替條形圖,一個更好的辦法。我可以用直方圖做的最好的是:

data.groupby(['popup','UID']).size().groupby(level=0).plot(kind='hist', bins=30, alpha=0.5, layout=(2,2), legend=True)  

Result

但我沒有發現HIST情節任何選項來獲得相同的渲染比柱狀圖中,沒有酒吧重疊。

**編輯:**這裏有一些信息來回答評論。

數據樣本:

 INSEE C1 popup C3     date \ 
0 75101.0 0.0  0 NaN 2017-05-17T13:20:16Z 
0 75101.0 0.0  0 NaN 2017-05-17T14:23:51Z 
1 31557.0 0.0  1 NaN 2017-05-17T14:58:27Z 

            UID 
0 ba4bd353-f14d-4bc5-95ba-6a1f5134cc84 
0 ba4bd353-f14d-4bc5-95ba-6a1f5134cc84 
1 bafe9715-3a07-4d9b-b85c-0bbf658a9115 

首先GROUPBY結果(樣品):

data.groupby(['popup','UID']).size().head(3) 
popup UID         
0  016d3e7e-1901-4f84-be0e-117988ec57a8 6 
     01c15455-29cc-4d1e-8743-638fd0f51602 6 
     03fc9eb0-c5fb-4205-91f0-4b74f78a8b96 3 
dtype: int64 

二GROUPBY結果(樣品):

data.groupby(['popup','UID']).size().groupby(level=0).value_counts().head(3) 
popup 
0  1 46 
     3 23 
     4 22 
dtype: int64 

後拆散和轉置:

data.groupby(['popup','UID']).size().groupby(level=0).value_counts().unstack().transpose().head(3)

popup  0  1 
1  46.0 38.0 
2  21.0 35.0 
3  23.0 22.0 

+0

您可以發佈樣本數據嗎?另外,groupby輸出是什麼樣的? –

+0

我對繪圖選項並不在意,但是您可以採用以數據爲中心的方法,只需在x軸上重新設置所需的所有值即可。也許有一個fillna呢?例如'df.reindex(範圍(30))。fillna(0)' – JohnE

回答

0

有來自matplotlib.axes.Axes.hist直方圖的解決方案。爲了這個目的,使用直方圖比柱狀圖更好,因爲我們可以選擇垃圾箱的數量。

# Separate groups by 'popup' and count number of records for each 'UID' 
popup_values = data['popup'].unique() 
count_by_popup = [data[data['popup'] == popup_value].groupby(['UID']).size() for popup_value in popup_values] 

# Create histogram 
fig, ax = plt.subplots() 
ax.hist(count_by_popup, 20, histtype='bar', label=[str(x) for x in popup_values]) 
ax.legend() 
plt.show()