为了账号安全,请及时绑定邮箱和手机立即绑定

初始化list的dict并在Python中更新其值

初始化list的dict并在Python中更新其值

喵喔喔 2021-04-02 09:11:41
我在下面有一个数据框:user | speed------------Anna | 1.0Bell | 1.2Anna | 1.3Chad | 1.5Bell | 1.4Anna | 1.1我想使用字典来记录每个用户遇到的次数并在我遍历数据帧时更新他/她的速度。例如,我们第一次看到“安娜”的字典是:{"Anna": [1, 1.0]}第二次我们看到“安娜”时,它变成:{"Anna": [2, 1.3], "Bell": [1, 1.2]}最后,字典应该是:{"Anna": [3, 1.1], "Bell": [2, 1.4], "Chad": [1, 1.5]}计数部分很容易:>>> import pandas as pd>>> record = pd.DataFrame({"user": ("Anna", "Bell", "Anna", "Chad", "Bell", "Anna"), "speed": (1.0, 1.2, 1.3, 1.5, 1.4, 1.1)})>>> record   speed  user0    1.0  Anna1    1.2  Bell2    1.3  Anna3    1.5  Chad4    1.4  Bell5    1.1  Anna>>> encounter = {}>>> for i in record['user']:...   encounter[i] = encounter.get(i, 0) + 1...>>> encounter{'Anna': 3, 'Bell': 2, 'Chad': 1}但是创建一个空的list字典并更新第二个值的好方法是什么?谢谢!
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

我相信这是您想要的两行内容。


import pandas as pd


record = pd.DataFrame({

  "user": ("Anna", "Bell", "Anna", "Chad", "Bell", "Anna"), 

  "speed": (1.0, 1.2, 1.3, 1.5, 1.4, 1.1)

})


encounter = {}

for name, value in zip(record["user"], record["speed"]):

  encounter[name] = [encounter.get(name, [0])[0] + 1, value]

该zip方法使您可以同时遍历名称和速度。

该get方法尝试获取记录,如果它存在,否则返回一个列表[0]。

第二个[0]采用列表的第一个元素,即计数器。

最后,它与新值结合在一起,成为一个新列表,并分配给encounter[name]。


查看完整回答
反对 回复 2021-04-27
?
aluckdog

TA贡献1847条经验 获得超7个赞

使用 collections.Counter


前任:


import pandas as pd

from decimal import Decimal

from collections import Counter


record = pd.DataFrame({"user": ("Anna", "Bell", "Anna", "Chad", "Bell", "Anna"), "speed": (1.0, 1.2, 1.3, 1.5, 1.4, 1.1)})


encounter = {}

for k,v in Counter(record["user"].tolist()).items():

    encounter[k] = [v, (record[record["user"] == k]["speed"].iloc[-1]).round(1).astype(Decimal)]


print(encounter)

输出:


{'Anna': [3, 1.1], 'Chad': [1, 1.5], 'Bell': [2, 1.4]}


查看完整回答
反对 回复 2021-04-27
?
冉冉说

TA贡献1877条经验 获得超1个赞

去pandorable,


my_dictionary={}

for k, v in df.groupby('user'):

    my_dictionary[k]=[len(v),v.iloc[-1]['speed']]

print(my_dictionary)

{'Anna': [3, 1.1], 'Bell': [2, 1.4], 'Chad': [1, 1.5]}


查看完整回答
反对 回复 2021-04-27
  • 3 回答
  • 0 关注
  • 321 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号