设DF1
是一个pandas数据帧,其中有一列字母和一列整数:
>>> k = pd.DataFrame({
"a": numpy.random.choice([i for i in "abcde"], 10),
"b": numpy.random.choice(range(5), 10)
})
>>> k
a b
0 a 1
1 c 2
2 e 1
3 b 3
4 c 2
5 d 2
6 e 2
7 c 3
8 b 0
9 a 3
使用value_counts()
,可以找到字母的计数:
>>> counts = k["a"].value_counts()
>>> counts
c 3
e 2
b 2
a 2
d 1
Name: a, dtype: int64
如何将每个事件添加到各自的行中? 它应该导致
>>> k
a b count
0 a 1 2
1 c 2 3
2 e 1 2
[...]
9 a 3 2
您可以尝试使用transform
k['count']=k.groupby('a').a.transform('count')
k
Out[330]:
a b count
0 d 1 2
1 e 3 3
2 e 3 3
3 d 3 2
4 b 4 4
5 b 1 4
6 b 0 4
7 a 2 1
8 b 0 4
9 e 4 3
以下是使用transform
:
首先,可以将value_counts()
提取到数据框架中:
mycounts=k['a'].value_counts().rename_axis('a').reset_index(name='counts')
上面的步骤在许多不同的场景中都是有用的(从总体上了解是很好的)。
然后,左联接将把值计数放入原始数据帧中:
k=k.merge(mycounts,left_on='a',right_on='a',how='left')