2016-09-16 218 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