提问者:小点点

如何将每个条目的出现添加到pandas数据帧中?


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

共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')