2016-11-10 44 views
0

我有一個非常簡單的數據框。有2列,day_created(int,可以更改爲datetime)並掛起(int,可以更改爲布爾值)。如果數據更容易處理,我可以更改數據。熊貓 - 裝箱數據和獲取2列

 Day created Suspended 
0    12   0 
1    6   1 
2    24   0 
3    8   0 
4    100   1 
5    30   0 
6    1   1 
7    6   0 

day_created列是帳戶創建日期(從開始日期開始)的整數,從1開始並且增加。懸浮柱爲1個懸浮液,0個爲無懸浮液。

我想要做的是將這些帳戶分成30天或幾個月的組,但從每個bin獲得該月的帳戶總數以及該月創建的帳戶數。然後,我計劃每個月創建一個帶有2個小節的條形圖。

我應該怎麼辦?我不經常使用熊貓。我想我需要重做一些技巧。

回答

1

使用

df.index = start_date + pd.to_timedelta(df['Day created'], unit='D') 

給數據幀的時間戳創建的帳戶時表示指數。

然後,可以根據時間戳在索引使用

result = df.groupby(pd.TimeGrouper(freq='M')).agg(['count', 'sum']) 

到組數據幀的行(由月)。 .agg(['count', 'sum'])計算每個組的帳戶數(計數)和暫停帳戶數。

然後result.plot(kind='bar', ax=ax)地塊柱狀圖:

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame(
    {'Day created': [12, 6, 24, 8, 100, 30, 1, 6], 
    'Suspended': [0, 1, 0, 0, 1, 0, 1, 0]}) 
start_date = pd.Timestamp('2016-01-01') 
df.index = start_date + pd.to_timedelta(df['Day created'], unit='D') 

result = df.groupby(pd.TimeGrouper(freq='M'))['Suspended'].agg(['count', 'sum']) 
result = result.rename(columns={'sum':'suspended'}) 

fig, ax = plt.subplots() 
result.plot(kind='bar', ax=ax) 
locs, labels = plt.xticks() 
plt.xticks(locs, result.index.strftime('%Y-%m-%d')) 
fig.autofmt_xdate() 
plt.show() 

產量 enter image description here

+0

的作品就像一個魅力 – Shatnerz

+0

我沒有挖到matplotlib的文檔,但有一個簡單的方法來截斷HH:MM :ss從日期? – Shatnerz

+1

我認爲最簡單的方法是使用'plt.xticks'來設置新的xtick標籤。我修改了上面的代碼以顯示我的意思。 – unutbu