熊猫:如何重新采样数据帧,以便每个组合都存在?

时间:2016-05-25 07:39:00

标签: python pandas

假设我们有以下数据框:

# data
t = pd.to_datetime(pd.Series(['2015-01-01', '2015-02-01', '2015-03-01', '2015-04-01', '2015-01-01', '2015-02-01']))
g = pd.Series(['A', 'A', 'A', 'A', 'B', 'B'])
v = pd.Series([12.1, 14.2, 15.3, 16.2, 12.2, 13.7])
df = pd.DataFrame({'time': t, 'group': g, 'value': v})

# show data
>>> df
        time group  value
0 2015-01-01  A     12.1 
1 2015-02-01  A     14.2 
2 2015-03-01  A     15.3 
3 2015-04-01  A     16.2 
4 2015-01-01  B     12.2 
5 2015-02-01  B     13.7 

我最终想要的是以下数据框:

>>> df
         time group  value
 0 2015-01-01  A     12.1 
 1 2015-02-01  A     14.2 
 2 2015-03-01  A     15.3 
 3 2015-04-01  A     16.2 
 4 2015-01-01  B     12.2 
 5 2015-02-01  B     13.7
 6 2015-03-01  B     13.7
 7 2015-04-01  B     13.7

应添加组B中缺少的观察值,缺失值应默认为最后观察到的值。

我怎样才能做到这一点?提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用pivot进行重塑, Then stop demo and start again. Sure it will work ffillfillna使用方法NaN),并使用unstack重塑为原始版本{ {3}}:

ffill

另一个解决方案首先找到reset_index date_rangemin print (df.pivot(index='time',columns='group',values='value') .ffill() .unstack() .reset_index(name='value')) group time value 0 A 2015-01-01 12.1 1 A 2015-02-01 14.2 2 A 2015-03-01 15.3 3 A 2015-04-01 16.2 4 B 2015-01-01 12.2 5 B 2015-02-01 13.7 6 B 2015-03-01 13.7 7 B 2015-04-01 13.7 的值max。然后groupby resample timeD

注意:

我认为您忘记了to_datetime中的参数ffill,如果最后一个号码是format='%Y-%d-%m'

month