2013-09-26 188 views
8

的整数系列I有如下的数据帧:转换浮子系列到大熊猫

In [31]: rise_p 
Out[31]: 
     time magnitude 
0 1379945444 156.627598 
1 1379945447 1474.648726 
2 1379945448 1477.448999 
3 1379945449 1474.886202 
4 1379945699 1371.454224 

现在,我想组行,其在一分钟之内。所以我把时间序列与100分开。我得到这个:

In [32]: rise_p/100 
Out[32]: 
      time magnitude 
0 13799454.44 1.566276 
1 13799454.47 14.746487 
2 13799454.48 14.774490 
3 13799454.49 14.748862 
4 13799456.99 13.714542 

如上所述,我想创建基于时间的组。因此,预期的子组将是时间为1379945413799456的行。我这样做:

​​

如何转换ts为整数系列自INT()不采取系列或列表作为参数?熊猫有什么方法可以做到这一点吗?

回答

13

尝试用astype转换:

new_re_df = [s.iloc[np.where(ts.astype(int) == int(i))] for i in ts] 

编辑

论@Rutger Kassies建议一个更好的办法是投系列,然后GROUPBY:

rise_p['ts'] = (rise_p.time/100).astype('int') 

ts_grouped = rise_p.groupby('ts') 

... 
+3

使用'astype()'是绝对正确的,但是避免列表理解会更好。像'ts ['time'] =(ts.time/100).astype('int')',然后用'ts.grouby('time')'进行分组等等...... –

+0

Yes agree,avoid the列表理解会更好,将编辑我的答案来反映。 – drexiya

4

这里有一个不同的方式来解决你的问题

In [3]: df 
Out[3]: 
     time magnitude 
0 1379945444 156.627598 
1 1379945447 1474.648726 
2 1379945448 1477.448999 
3 1379945449 1474.886202 
4 1379945699 1371.454224 

In [4]: df.dtypes 
Out[4]: 
time   int64 
magnitude float64 
dtype: object 

将您的纪元时间戳秒

In [7]: df['time'] = pd.to_datetime(df['time'],unit='s') 

设置索引

In [8]: df.set_index('time',inplace=True) 

In [9]: df 
Out[9]: 
         magnitude 
time        
2013-09-23 14:10:44 156.627598 
2013-09-23 14:10:47 1474.648726 
2013-09-23 14:10:48 1477.448999 
2013-09-23 14:10:49 1474.886202 
2013-09-23 14:14:59 1371.454224 

GROUPBY 1分钟,平均结果(how=可以是任意功能以及)

In [10]: df.resample('1Min',how=np.mean) 
Out[10]: 
         magnitude 
time        
2013-09-23 14:10:00 1145.902881 
2013-09-23 14:11:00   NaN 
2013-09-23 14:12:00   NaN 
2013-09-23 14:13:00   NaN 
2013-09-23 14:14:00 1371.454224 
+0

Thanx @Jeff!这种方法看起来不错。有些方法对我来说是新的。我会试试这个。现在,我将使用@drexiya给出的答案。 – Geekster

+0

http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time-zone-handling – Jeff

+0

Thanx @Jeff。发布评论后我发现了这个资源。所以我删除了相同的评论。 – Geekster