2016-09-16 2 views
2

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

+-------------------------+-------------+------+--------+-------------+--------+--+ 
|       | impressions | name | shares | video_views | diff | | 
+-------------------------+-------------+------+--------+-------------+--------+--+ 
| _ts      |    |  |  |    |  | | 
| 2016-09-12 23:15:04.120 |   1 | Vidz |  7 |  10318 | 15mins | | 
| 2016-09-12 23:16:45.869 |   2 | Vidz |  7 |  10318 | 16mins | | 
| 2016-09-12 23:30:03.129 |   3 | Vidz |  18 |  29291 | 30mins | | 
| 2016-09-12 23:32:08.317 |   4 | Vidz |  18 |  29291 | 32mins | | 
+-------------------------+-------------+------+--------+-------------+--------+--+ 

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

+-------------------------+------+--------------+-------------------+-------------------+--------------+-------------------+-------------------+ 
|       | name | 15min_shares | 15min_impressions | 15min_video_views | 30min_shares | 30min_impressions | 30min_video_views | 
+-------------------------+------+--------------+-------------------+-------------------+--------------+-------------------+-------------------+ 
| _ts      |  |    |     |     |    |     |     | 
| 2016-09-12 23:15:04.120 | Vidz |   7 |     1 |    10318 |   18 |     3 |    29291 | 
+-------------------------+------+--------------+-------------------+-------------------+--------------+-------------------+-------------------+ 

Какой был бы лучший способ сделать это? Я думаю, что это было бы легче, если бы я только пытался выбрать 1 строку (15 минут), просто разобрать ненужные строки и поворот.

Однако, мне нужен 15мин и 30мин особенность, и я не уверен в том, как действовать в необходимости этих колонок

+0

ли вы сейчас о [ 'pandas.DataFrame.get_dummies()'] (HTTP://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html), это не совсем то, что вы просили, но может быть обходным путем. – quapka

+0

Выход, который вы хотите, не имеет смысла. Ваша строка _ts с 2016-09-12 23: 15: 04.120 не имеет 30-минутных показов. –

ответ

2

Вы можете взять подмножества вашей DF включать строки для 15mins и 30mins и сцепить их засыпка NaN значения из первого ряда (15 минут), с тем, что из его следующий ряд (30 мин) и прерывают следующий ряд (30 минут), как показано ниже:

prefix_15="15mins" 
prefix_30="30mins" 

fifteen_mins = (df['diff']==prefix_15) 
thirty_mins = (df['diff']==prefix_30) 

df = df[fifteen_mins|thirty_mins].drop(['diff'], axis=1) 

df_ = pd.concat([df[fifteen_mins].add_prefix(prefix_15+'_'),   \ 
       df[thirty_mins].add_prefix(prefix_30+'_')], axis=1) \ 
       .fillna(method='bfill').dropna(how='any') 

del(df_['30mins_name']) 
df_.rename(columns={'15mins_name':'name'}, inplace=True) 
df_ 

Image

0

укладки для поворота и разворачивая ваши колонны

df1 = df.set_index('diff', append=True).stack().unstack(0).T 
df1.columns = df1.columns.map('_'.join) 

Чтобы увидеть только первый ряд

df1.iloc[[0]].dropna(1) 

enter image description here

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