Повторная выборка python pandas

У меня есть следующий фреймворк:

Timestamp S_time1 S_time2 End_Time_1 End_time_2 Sign_1 Sign_2 0 2413044 0 0 0 0 xx 1 2422476 0 0 0 0 xx 2 2431908 0 0 0 0 xx 3 2441341 0 0 0 0 xx 4 2541232 2526631 2528631 2520631 2530631 10 80 5 2560273 2544946 2546496 2546496 2548496 40 80 6 2577224 2564010 2566010 2566010 2568010 null null 7 2592905 2580959 2582959 2582959 2584959 null null 

Стол идет так далее. Первый столбец – это метка времени, которая находится в миллисекундах. S_time1 и End_time_1 – это продолжительность, в которой появляется конкретный знак (число). Например, если мы берем 5-ю строку, S_time1 составляет 2526631, End_time_1 составляет 2520631, а соответствующий sign_1 равен 10, что означает, что с 2526631 по 2520631 будет отображаться знак 10. То же самое происходит с S_time2 и End_time_2 . Соответствующие значения в sign_2 будут отображаться в S_time2 от S_time2 до End_time_2 .

Я хочу переконвертировать индексный столбец ( Timestamp ) в течение 100-миллисекундного времени бина и проверить, в каком бункере время знаков. Например, между каждым временем начала и временем окончания существует разница в 2000 миллисекунд. Соответственно, соответствующий номер знака будет отображаться повторно примерно в течение 20 последовательных интервалов бит, так как время каждого бина составляет 100 миллисекунд. Поэтому мне нужно иметь только два столбца: один с бункером, а второй со знаками. Похож на следующую таблицу: (Я просто составляю время в бункере только для примера)

 Bin_time signs ...100 0 ...200 0 ...300 10 ...400 10 ...500 10 ...600 10 

Знак 10 будет на время соответствующего S_time1 до End_time_1. Затем следующий знак, который равен 80, продолжается в течение S_time2 до End_time_2. Я не уверен, что это можно сделать в пандах или нет. Но мне действительно нужна помощь в пандах или других методах.

Спасибо за вашу помощь и предложение заранее.

One Solution collect form web for “Повторная выборка python pandas”

Входные данные:

 print df Timestamp S_time1 S_time2 End_Time_1 End_time_2 Sign_1 Sign_2 0 2413044 0 0 0 0 xx 1 2422476 0 0 0 0 xx 2 2431908 0 0 0 0 xx 3 2441341 0 0 0 0 xx 4 2541232 2526631 2528631 2520631 2530631 10 80 5 2560273 2544946 2546496 2546496 2548496 40 80 6 2577224 2564010 2566010 2566010 2568010 null null 7 2592905 2580959 2582959 2582959 2584959 null null 

2 подхода:

 In [231]: %timeit s(df) 1 loops, best of 3: 2.78 s per loop In [232]: %timeit m(df) 1 loops, best of 3: 690 ms per loop 
 def m(df): #resample column Timestamp by 100ms, convert bak to integers df['Timestamp'] = df['Timestamp'].astype('timedelta64[ms]') df['i'] = 1 df = df.set_index('Timestamp') df1 = df[[]].resample('100ms', how='first').reset_index() df1['Timestamp'] = (df1['Timestamp'] / np.timedelta64(1, 'ms')).astype(int) #felper column i for merging df1['i'] = 1 #print df1 out = df1.merge(df,on='i', how='left') out1 = out[['Timestamp', 'Sign_1']][(out.Timestamp >= out.S_time1) & (out.Timestamp <= out.End_Time_1)] out2 = out[['Timestamp', 'Sign_2']][(out.Timestamp >= out.S_time2) & (out.Timestamp <= out.End_time_2)] out1 = out1.rename(columns={'Sign_1':'Bin_time'}) out2 = out2.rename(columns={'Sign_2':'Bin_time'}) df = pd.concat([out1, out2], ignore_index=True).drop_duplicates(subset='Timestamp') df1 = df1.set_index('Timestamp') df = df.set_index('Timestamp') df = df.reindex(df1.index).reset_index() #print df.head(10) 
 def s(df): #resample column Timestamp by 100ms, convert bak to integers df['Timestamp'] = df['Timestamp'].astype('timedelta64[ms]') df = df.set_index('Timestamp') out = df[[]].resample('100ms', how='first') out = out.reset_index() out['Timestamp'] = (out['Timestamp'] / np.timedelta64(1, 'ms')).astype(int) #print out.head(10) #search start end def search(x): mask1 = (df.S_time1<=x['Timestamp']) & (df.End_Time_1>=x['Timestamp']) #if at least one True return first value of series if mask1.any(): return df.loc[mask1].Sign_1[0] #check second start and end time else: mask2 = (df.S_time2<=x['Timestamp']) & (df.End_time_2>=x['Timestamp']) if mask2.any(): #if at least one True return first value return df.loc[mask2].Sign_2[0] else: #if all False return NaN return np.nan out['Bin_time'] = out.apply(search, axis=1) #print out.head(10) 
  • Как я могу обновить python на сервере Debian?
  • выполнение определенного оператора с заданной скоростью в python
  • символ utf-8 в пути пользователя не позволяет импортировать модуль
  • URLError: ошибка <urlopen getaddrinfo не удалось>
  • Использование Mechanize (Python) для заполнения формы
  • Получить текст с помощью селектора CSS BeautifulSoup
  • Как читать csv в многомерный массив
  • Преобразовать целое число в 2-байтовое значение Hex в Python
  • Python - лучший язык программирования в мире.