2016-02-18 5 views
1

У меня есть набор dataframe, который выглядит следующим образом:Панды Многопользовательские Время Интерполяция

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

Я хочу использовать панд синхронизацию времени для каждого пользователя таким образом, что я в конечном итоге с dataframe, который выглядит следующим образом:

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 

другими словами, я хочу использовать панд для синхронизации таймсерий для каждого пользователя, учитывая, что отдельные пользователи предыдущее значение. Если прежнего значения нет, он просто возвращает заполнение первого значения пользователей. Так, например, J не появляется до 2, поэтому в момент времени 0 и 1 мы сохраняем J как 6. Я новичок в пандах, но взволнован, чтобы сделать это, я читал об выравнивании, интерполяции и т. Д., Но я ничего не видел что сосредоточено на многопользовательских данных, подобных этому. Буду признателен, как это сделать.

ответ

1

Вы можете попробовать первый set_index из колонки user, а затем groupby с пользовательской функцией f, которые используют reindex, sort_values, fillna и combine_first. Последнее вы можете reset_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 
+0

Это решение зависит от ваших данных. Он работает, если в вашем примере есть данные. Если нет, возможно, нужно работать или работать неправильно. – jezrael

+0

@eWizardII Как это работает? Спасибо за голосование, если вы проголосуете за мое решение. – jezrael

+0

похоже, что сейчас он работает, мне просто нужно его ускорить, так как у меня более 6000 строк и около 60 уникальных пользователей. есть идеи? – eWizardII

Смежные вопросы