重新采样Pandas时间序列数据,每行只保留有效数字

时间:2015-08-27 17:30:57

标签: python pandas

我有一个数据框,其中包含一个网页列表,其中unix hour按小时计算总和。

透视,它看起来像这样:

+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| unix hour | 394533 | 394534 | 394535 | 394536 | 394537 | 394538 | 394539 | 394540 | 394541 | 394542 | 394543 |
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| page      |        |        |        |        |        |        |        |        |        |        |        |
| 3530765   |   5791 |   6017 |   5302 |        |        |        |        |        |        |        |        |
| 3563667   |        |        |        |   3481 |   2840 |   2421 |        |        |        |        |        |
| 3579922   |        |        |        |        |        |        |   1816 |   1947 |   1878 |   2013 |   1718 |
+-----------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

我没有时间实际上是时间,而是希望集中在一起,看起来像这样:

+---------+------+------+------+------+------+
|  hour   |  1   |  2   |  3   |  4   |  5   |
+---------+------+------+------+------+------+
| page    |      |      |      |      |      |
| 3530765 | 5791 | 6017 | 5302 |      |      |
| 3563667 | 3481 | 2840 | 2421 |      |      |
| 3579922 | 1816 | 1947 | 1878 | 2013 | 1718 |
+---------+------+------+------+------+------+

这将是在熊猫中做到这一点的最好方法吗?

*注意 - 我认为列的时间并不理想,但对于我的完整数据集,我有7k页,而且只有72小时,所以对我来说,页面作为索引,小时作为列最有意义。

1 个答案:

答案 0 :(得分:2)

假设数据存储为float

In [191]:

print df.dtypes
 394533     float64
 394534     float64
 394535     float64
 394536     float64
 394537     float64
 394538     float64
 394539     float64
 394540     float64
 394541     float64
 394542     float64
 394543     float64
dtype: object

我们会这样做:

In [192]:

print df.apply(lambda x: pd.Series(data=x[np.isfinite(x)].values), 1)
            0     1     2     3     4
page                                 
3530765  5791  6017  5302   NaN   NaN
3563667  3481  2840  2421   NaN   NaN
3579922  1816  1947  1878  2013  1718

我们的想法是获取每行的有效数字,将这些行放入Series,但不要将原始UNIXtime作为索引。因此,索引将变为0,1,2 ....如果必须,您可以轻松地将其1,2,3...设为df2.columns = df2.columns+1,假设结果已分配df2