Pandas多用户时间插值

时间:2016-02-18 06:11:38

标签: python pandas dataframe time-series

我有一个类似于以下内容的数据框:

time  user value
0     R    3
1     S    5
2     J    6

我想使用pandas来同步每个用户的时间,这样我最终会得到一个如下所示的数据框:

time  user value
0     R    3
0     S    5
0     J    6
1     S    5
1     R    3
1     J    6
2     J    6
2     R    3
2     S    5

换句话说,我想使用pandas来同步给定特定用户之前值的每个用户的时间序列。如果没有先前的值,则只返回填充用户的第一个值。所以例如J直到2才显示,所以在时间0和1我们将J存储为6.我是熊猫的新手,但很高兴这样做,我读过有关对齐,插值等,但我没有看到专注于这样的多用户数据。会很感激如何做到这一点。

1 个答案:

答案 0 :(得分:1)

您可以先使用自定义函数userf列开始尝试set_index,然后使用自定义函数print df time user value 0 0 R 3 1 1 S 5 2 2 J 6 df = df.set_index(['user']) def f(x): #print x x = x.reindex(df.index) x = x.sort_values('value') x['time'] = x['time'].fillna(method='ffill') x['value'] = x['value'].combine_first(df['value']) return x df = df.groupby(level=0, sort=False).apply(f).reset_index(level=0, drop=True).reset_index() df = df[['time','user','value']] print df time user value 0 0 R 3 1 0 S 5 2 0 J 6 3 1 S 5 4 1 R 3 5 1 J 6 6 2 J 6 7 2 R 3 8 2 S 5 groupbyreindex,{ {3}}和sort_values。最后你可以fillna并重新排序列:

set star = "*"
set ans = "$ans$star"