python - 在Python中初始化列表的字典并更新其值

标签 python python-3.x pandas

我有一个下面的数据框:

user | speed
------------
Anna | 1.0
Bell | 1.2
Anna | 1.3
Chad | 1.5
Bell | 1.4
Anna | 1.1

我想使用字典来记录每个用户的遇到次数,并在循环数据帧时更新他/她的速度。

例如,我们第一次看到“Anna”时,字典是:

{"Anna": [1, 1.0]}

当我们第二次看到“Anna”时,它变成:

{"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  user
0    1.0  Anna
1    1.2  Bell
2    1.3  Anna
3    1.5  Chad
4    1.4  Bell
5    1.1  Anna
>>> encounter = {}
>>> for i in record['user']:
...   encounter[i] = encounter.get(i, 0) + 1
...
>>> encounter
{'Anna': 3, 'Bell': 2, 'Chad': 1}

但是创建列表的空字典并更新第二个值的好方法是什么?谢谢!

最佳答案

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

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]
  1. zip 方法可让您同时循环显示名称和速度。
  2. get 方法尝试获取记录(如果存在),否则返回列表 [0]
  3. 第二个[0]采用列表的第一个元素,即计数器。
  4. 最后它与新值结合,成为一个新列表,并分配给encounter[name]

关于python - 在Python中初始化列表的字典并更新其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238873/

相关文章:

python - 如何使 Python 3 的打印适合命令提示符的大小?

python - 如果数据框中的列名相同,则连接列

Python Pandas : summing value of two or more DataFrames with identical value in multiple columns

python - 如何根据 Pandas 数据框中的列表重新排序索引行

python - postgres 和 postgresql_psycopg2 作为 django 的数据库引擎有什么区别?

python - pandas.Series.div() vs/=

python - 根据匹配值从不同的 Dataframe 更新 Dataframe

python - pyinstaller 在程序内找不到文件路径

python-3.x - 是否可以控制函数如何将 np.array 向量化为参数?

Python 在迭代文件行时无法更改变量的值