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]。

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]}

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]}
添加回答
举报