gpt4 book ai didi

python - DataFrame 中特定项目的值计数

转载 作者:行者123 更新时间:2023-12-01 01:52:16 26 4
gpt4 key购买 nike

我有一个消息数据框 (df),其外观类似于以下内容:

From                To
person1@gmail.com stranger1@gmail.com
person2@gmail.com stranger1@gmail.com, stranger2@gmail.com
person3@gmail.com person1@gmail.com, stranger2@gmail.com

我想计算每封电子邮件在特定列表中出现的次数。我的 list 是:

lst = ['person1@gmail.com', 'stranger2@gmail.com', 'person3@gmail.com']

我希望收到一个数据框/系列/字典,其结果如下:

list_item              Total_Count
person1@gmail.com 2
stranger2@gmail.com 2
person3@gmail.com 1

我尝试了几种不同的方法,但都没有成功。我想我可以尝试类似下面的 for 循环(它返回语法错误),但我无法找出正确的编写方法。

for To,From in zip(df.To, df.From): 
for item in lst:
if To,From contains item in emails:
Count(item)

这种类型的任务应该通过 for 循环来完成,还是有开箱即用的 pandas 方法可以更轻松地解决这个问题?

最佳答案

基于堆栈

拆分您的To列,堆叠所有内容,然后执行value_counts:

v = pd.concat([df.From, df.To.str.split(', ', expand=True)], axis=1).stack()
v[v.isin(lst)].value_counts()

stranger2@gmail.com 2
person1@gmail.com 2
person3@gmail.com 1
dtype: int64
<小时/>

融化

另一种选择是使用melt:

v = (df.set_index('From')
.To.str.split(', ', expand=True)
.reset_index()
.melt()['value']
)
v[v.isin(lst)].value_counts()

stranger2@gmail.com 2
person1@gmail.com 2
person3@gmail.com 1
Name: value, dtype: int64

请注意,set_index + str.split + reset_indexpd.concat([...])<同义...

关于python - DataFrame 中特定项目的值计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50596383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com