2016-09-16 1 views
2

Ich habe einen Datensatz, wie unten aussieht:bestimmte Zeilenwerte auswählen und sie Spalten in Pandas machen

+-------------------------+-------------+------+--------+-------------+--------+--+ 
|       | 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 | | 
+-------------------------+-------------+------+--------+-------------+--------+--+ 

ich einen Datenrahmen zu bauen, ich versuche zu einem Regressionsmodell zu ernähren, und ich möchte Analysieren bestimmter Zeilen als Features. Um dies zu tun, möchte ich den Datenrahmen zu diesem ähneln

+-------------------------+------+--------------+-------------------+-------------------+--------------+-------------------+-------------------+ 
|       | 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 | 
+-------------------------+------+--------------+-------------------+-------------------+--------------+-------------------+-------------------+ 

Was wäre der beste Weg, dies zu tun? Ich denke, das wäre einfacher, wenn ich nur eine Reihe (15 Minuten) auswählen würde, einfach die unnötigen Reihen analysieren und drehen.

Ich brauche aber 15min und 30min Funktionen und bin nicht sicher, wie man für diese Spalten von der Notwendigkeit gehen

+0

Haben Sie jetzt über [ 'pandas.DataFrame.get_dummies()'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html), es ist nicht genau das, wonach Sie gefragt haben, aber es könnte ein Workaround sein. – quapka

+0

Die gewünschte Ausgabe ist nicht sinnvoll. Ihre _ts-Zeile mit 2016-09-12 23: 15: 04.120 hat keine 30-Minuten-Impressionen. –

Antwort

2

Sie Teilmengen Ihrer DF nehmen könnte Reihen für 15 Minuten und 30 Minuten umfassen und verketten sie durch Verfüllung NaN Werte die ersten Reihe (15 Minuten) mit dem es nächste Reihe (30 Minuten), und die nächste Reihe (30 Minuten), wie gezeigt Abwurf:

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

Stapelung zu verschwenken und kollabiert Ihre Spalten

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

Um zu sehen, nur die erste Zeile

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

enter image description here

Verwandte Themen