Python 将计数连接到熊猫中的原始数据帧

Python 将计数连接到熊猫中的原始数据帧,python,pandas,Python,Pandas,将数据帧作为 import pandas as pd lst = ['Yes', 'No', 'Maybe', 'Yes', 'No', 'Maybe', 'Yes'] lst2 = [11, 22, 33, 44, 55, 66, 77] df = pd.DataFrame(list(zip(lst, lst2)), columns =['Name', 'val']) 我过去常在下面按计数分组 countData=df.groupby("Name")["

将数据帧作为

import pandas as pd 
lst = ['Yes', 'No', 'Maybe', 'Yes', 'No', 'Maybe', 'Yes'] 
lst2 = [11, 22, 33, 44, 55, 66, 77] 
df = pd.DataFrame(list(zip(lst, lst2)), 
               columns =['Name', 'val'])
我过去常在下面按计数分组

countData=df.groupby("Name")["Name"].count()
countData
名字

也许2

二号

是3


如何将countData与DF连接起来?

您可以使用
转换

df['countData'] = df.groupby("Name")["Name"].transform(lambda x: x.count())
df:


您可以设置df的索引,然后分配计数,然后重置,然后索引:

count_data = df['Name'].value_counts()
df.set_index('Name', inplace=True)
df['count'] = count_data
df.reset_index(inplace=True)
这就给了我们:

>>> df
    Name  val  count
0    Yes   11      3
1     No   22      2
2  Maybe   33      2
3    Yes   44      3
4     No   55      2
5  Maybe   66      2
6    Yes   77      3

可能的小改进,您可以使用
.transform(pd.Series.count)
代替,从而省略lambda表达式+不管怎样:)@WillemVanOnsem好吧,在改进的基础上改进。如果pandas接受
str
args,为什么要声明函数对象本身<代码>.transform('count')
避免了这一切;pExpanding@rafaelc说,直接传递函数比传递字符串性能差得多。在后台,我相信后者调用
apply
,而不是使用从字符串推断的向量化
count
。如果传递字符串,它将被拾取并返回
\u transform\u fast
,因为计数是一种减少。否则,它将作为lambda函数应用于每个组。几乎和应用
@Willem或其他人一样糟糕,请将代码作为注释或答案发布
>>> df
    Name  val  count
0    Yes   11      3
1     No   22      2
2  Maybe   33      2
3    Yes   44      3
4     No   55      2
5  Maybe   66      2
6    Yes   77      3