2016-11-10 43 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