我的数据集看起来是这样的:
<link>, <type>
例如,类型可以是“dofollow”、“nofollow”和“javascript”。
鉴于每个链接可能在数据集中出现多次,我需要通过以下方式获取结果
link, dofollow, nofollow, javascript
http://somelink.com, 10 (e.g. it appeared 10 times as dofollow), 0, 101
最佳答案
您可以使用分组大小:
In [11]: df = pd.DataFrame([['a_link', 'dofollow'], ['a_link', 'dofollow'], ['a_link', 'nofollow'], ['b_link', 'javascript']], columns=['link', 'type'])
In [12]: df
Out[12]:
link type
0 a_link dofollow
1 a_link dofollow
2 a_link nofollow
3 b_link javascript
In [13]: df.groupby(['link', 'type']).size()
Out[13]:
link type
a_link dofollow 2
nofollow 1
b_link javascript 1
dtype: int64
现在,您取消堆叠第二层(类型),使其成为一列并填充空白:
In [14]: df.groupby(['link', 'type']).size().unstack(1)
Out[14]:
type dofollow javascript nofollow
link
a_link 2 NaN 1
b_link NaN 1 NaN
In [15]: df.groupby(['link', 'type']).size().unstack(1).fillna(0)
Out[15]:
type dofollow javascript nofollow
link
a_link 2 0 1
b_link 0 1 0
关于python:与 pandas 一起工作。获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177533/