2016-09-16 227 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 | | 
+-------------------------+-------------+------+--------+-------------+--------+--+ 

我試圖建立一個數據幀喂到迴歸模型,我想將特定行解析爲特徵。要做到這一點,我希望數據框類似於這個

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

你想要的輸出沒有意義。 2016-09-12 23:15:04.120您的_ts行沒有任何30分鐘的展示次數。 –

回答

2

你可以把你的DF的子集,以包括15分鐘和30分鐘行和回填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