重塑熊猫中的表格

时间:2013-05-23 15:52:28

标签: python arrays pandas dataframe

以下是我创建合并多个查询日志数据帧的数据框的摘录:

                keyword               hits         date         average time
1               the cat sat on        10           10-Jan       10
2               who is the sea        5            10-Jan       1.2
3               under the earth       30           1-Dec        2.5
4               what is this          100          1-Feb        9

有没有办法可以使用Pandas来旋转数据,以便行是每日日期(例如1月1日,2月1日等),每个日期的相应1列是每日点击总和(总和当天的点击次数,例如1月1日的点击总数)除以该月的点击总数(例如整个1月份)(即每天的标准化每日命中百分比)

1 个答案:

答案 0 :(得分:1)

解析日期,以便我们可以在一个月后提取。

In [99]: df.date = df.date.apply(pd.Timestamp)

In [100]: df
Out[100]: 
           keyword  hits                date  average time
1   the cat sat on    10 2013-01-10 00:00:00          10.0
2   who is the sea     5 2013-01-10 00:00:00           1.2
3  under the earth    30 2013-12-01 00:00:00           2.5
4     what is this   100 2013-02-01 00:00:00           9.0

按天分组并总结点击数。

In [101]: daily_totals = df.groupby('date').hits.sum()

In [102]: daily_totals
Out[102]: 
date
2013-01-10     15
2013-02-01    100
2013-12-01     30
Name: hits, dtype: int64

按月分组,并将每一行(每日总数)除以该月所有每日总数的总和。

In [103]: normalized_totals = daily_totals.groupby(lambda d: d.month).transform(lambda x: float(x)/x.sum())

In [104]: normalized_totals
Out[104]: 
date
2013-01-10    1
2013-02-01    1
2013-12-01    1
Name: hits, dtype: int64

你的简单例子每个月只有一天,所以这些都是1。