2016-09-30 4 views
0

У меня есть очень интересная проблема здесь, у меня есть набор данных, как,Заполнение dataframe столбцов на основе диапазонов, указанных в других столбцах

id, start, end 
    1234 200 400 
    1235 300 500 
    1236 100 900 
    1236 200 1200 
    1236 300 1400 

Главная цель: Я хочу, чтобы подсчитать количество одновременных сеансов для каждого Я бы.

at 100, id:1236 has 1 session running 
at 200, id:1236 has 2 sessions 
at 300, id:1236 has 3 sessions 
... 
at 1000m id:1236 has 2 sessions 
etc 

Мое решение:

  • Добавить столбцы от 1 до 1400 (мин и макс сеансов) для всех строк
  • заполнить столбцы между начальным значением сеанса и конечного сеанса значение с 1
  • затем добавьте все строки пользователя, чтобы получить приведенный выше результат.

В панд:

df = pd.read_csv(data+fileName,sep="\t",usecols=[0,1,2],names=['id','start','end']) 

for i in range(0,1440): 
    df[str(i)]=0 

print df.columns 

Я мог бы добавить столбцы и думал как заполнить 1 до этих столбцов между началом и концом сеанса в каждой строке. Каждая строка может иметь разные начальные и конечные сеансы.

Любой намек поможет. Я просто пытаюсь это в пандах, но позже Мне нужно перенести его в pyspark Apache, где нет панд в рабочих узлах.

+1

В Pandas вы также можете сделать это: 'df [(df.start <= t) & (df.end> = t)]. groupby ("id"). count() ['start']. reset_index() 'где' t' - ваше желаемое время. Просто переименуйте последний столбец соответственно. Но я не знаю, может ли это быть перенесено на pyspark. – Khris

+0

Спасибо, @Khris, действительно, это хороший подход. здесь мне придется зацикливаться от 1 до 1400, чтобы получить результат, поэтому интенсивность процессора и мой подход выглядит интенсивным. – suppoor

ответ

0

В панд вы также можете сделать это:.. Д.Ф. [(df.start < = т) & (df.end> = т)] GroupBy ("ID") рассчитывать() [ 'старт'] reset_index.(), где t - желаемое время. Просто переименуйте последний столбец соответственно. Но я не знаю, может ли это быть перенесено на pyspark. @ Khris

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