我从具有单独点击数据的数据集开始。我以年度方式汇总数据以构建时间序列。但我遇到的一个问题是聚合点击源(点击来自的例子)。因此,在聚合之后,我有以下数据框。
year month clickSource
0 2010 01 google, yahoo, google, google, facebook, facebook
1 2010 02 facebook, yahoo, google, google, facebook, facebook
2 2010 03 yahoo, yahoo, google, google, facebook, facebook
3 2010 04 google, yahoo, google, twitter, facebook, facebook
4 2010 05 facebook, yahoo, google, google, facebook, facebook
5 2010 06 twitter, yahoo, google, twitter, facebook, google
我想为clickSource
列中的每个唯一项目以及计数示例引入列:
year month google yahoo facebook twitter
0 2010 01 3 1 2 0
1 2010 02 2 1 3 0
2 2010 03 2 2 2 0
...
最初我的专栏是一个字符串对象,所以我把它转换为fallows列出:
temp['clickSource'] = temp['clickSource'].apply(lambda x: x.split(','))
然后我做了一个系列:
col_names = temp['clickSource'].apply(pd.Series)
但是这为列表中的每个项目创建了一个列,而不是每个项目一次(显然是因为我没有告诉它计算等)。如何获得我解释的内容?
答案 0 :(得分:3)
创建一个数据框,其中源列分割并分布在多个列中:
rewrite ^/foo/(.*) /AA$1 break;
提取该数据框中元素的计数器,并获取重复的列名:
df = temp.clickSource.str.split(',', expand=True)
将结果沿列轴分组并对结果求和:
df = pd.get_dummies(df, prefix='', prefix_sep='')
合并两个结果数据帧:
df = df.groupby(df.columns, axis=1).sum()
df
facebook google twitter yahoo
0 2 3 0 1
1 3 2 0 1
2 2 2 0 2
3 2 2 1 1
4 3 2 0 1
5 1 2 2 1
答案 1 :(得分:3)
df.set_index(['year', 'month']).clickSource.str.split(', ') \
.apply(pd.value_counts).fillna(0).astype(int).reset_index()
答案 2 :(得分:2)