[英]Initialize dict of list and update its values in Python
我有一個數據框如下:
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": [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]
zip
方法可讓您同時循環顯示名稱和速度。 get
方法嘗試獲取記錄(如果存在),否則返回列表[0]
。 [0]
獲取列表的第一個元素,即計數器。 encounter[name]
。 使用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]}
與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]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.