我有一个数据框,其中包含一个网页列表,其中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小时,所以对我来说,页面作为索引,小时作为列最有意义。
答案 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
。