我有一个熊猫系列
(我是通过两个专栏组成的
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.SetParent(this);
frm2.ShowDialog();
}
):
divvy_df.groupby(['from_station_name', 'starttime']).size()
如您所见,生成的系列显示了为该工作站名称记录启动时间的次数。我想以某种方式制作它,以便创建缺少时隙并使用值0填充。这可能吗?
所以我想要这样的事情:
from_station_name starttime
900 W Harrison 2014-07-01 08:00:00 1
2014-07-01 10:00:00 1
2014-07-01 11:00:00 1
2014-07-01 12:00:00 1
2014-07-01 13:00:00 1
2014-07-01 16:00:00 1
2014-07-01 17:00:00 3
2014-07-01 22:00:00 1
2014-07-02 01:00:00 1
2014-07-02 08:00:00 1
2014-07-02 12:00:00 2
...
完成这样的事情的最佳方式是什么?
答案 0 :(得分:4)
通常当你有一个使用DatetimeIndex的系列ts
时,你可以将它扩展为
使用ts.reindex
或ts.asfreq
或ts.resample
添加新日期。
由于ts.reindex
有一个fill_value
参数用于填写缺失值,我
认为在这种情况下使用ts.reindex
最容易。
但是,在此问题中,ts
具有带from_station_name
和的starttime
的MultiIndex
from_station_name
级别。
因此,第一步是将reset_index
级别移出索引。
有两种选择。您可以使用unstack
将其移至列,或使用
unstacking
将其移至新的列索引级别。我认为ts = ts.unstack(level=0)
与
reset_index
是更好的选择,因为使用其他选项(使用from_station_name
)
你遇到与索引中的重复日期相关的问题,以及问题
回填和向前填充缺少reindex
值。
现在系列有一个单一级别的DatetimeIndex,所以你可以index = pd.date_range('2014-07-01', '2014-07-03', freq='H')
ts = ts.reindex(index, fill_value=0)
这样:
unstack
现在撤消ts = ts.stack()
ts = ts.swaplevel(0,1)
操作,从而将列索引级别移回
进入行索引:
import pandas as pd
ts = pd.Series({('900 W Harrison', '2014-07-01 08:00:00'): 1,
('900 W Harrison', '2014-07-01 10:00:00'): 1,
('900 W Harrison', '2014-07-01 11:00:00'): 1,
('900 W Harrison', '2014-07-01 12:00:00'): 1,
('900 W Harrison', '2014-07-01 13:00:00'): 1,
('900 W Harrison', '2014-07-01 16:00:00'): 1,
('900 W Harrison', '2014-07-01 17:00:00'): 3,
('900 W Harrison', '2014-07-01 22:00:00'): 1,
('900 W Harrison', '2014-07-02 01:00:00'): 1,
('900 W Harrison', '2014-07-02 08:00:00'): 1,
('900 W Harrison', '2014-07-02 12:00:00'): 2})
ts = ts.unstack(level=0)
# ensure ts.index is a DatetimeIndex
ts.index = pd.to_datetime(ts.index)
index = pd.date_range('2014-07-01', '2014-07-03', freq='H')
ts = ts.reindex(index, fill_value=0)
ts = ts.stack()
ts = ts.swaplevel(0,1)
ts = ts.sortlevel()
print(ts)
900 W Harrison 2014-07-01 00:00:00 0
2014-07-01 01:00:00 0
2014-07-01 02:00:00 0
2014-07-01 03:00:00 0
2014-07-01 04:00:00 0
2014-07-01 05:00:00 0
2014-07-01 06:00:00 0
2014-07-01 07:00:00 0
2014-07-01 08:00:00 1
2014-07-01 09:00:00 0
2014-07-01 10:00:00 1
...
2014-07-02 21:00:00 0
2014-07-02 22:00:00 0
2014-07-02 23:00:00 0
2014-07-03 00:00:00 0
dtype: int64
产量
viewForRow: