我有一个类似于以下内容的数据框:
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.我是熊猫的新手,但很高兴这样做,我读过有关对齐,插值等,但我没有看到专注于这样的多用户数据。会很感激如何做到这一点。
答案 0 :(得分:1)
您可以先使用自定义函数user
从f
列开始尝试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
,groupby
,reindex
,{ {3}}和sort_values
。最后你可以fillna
并重新排序列:
set star = "*"
set ans = "$ans$star"