我在一次采访中遇到了这个问题,想不出解决办法.这就是问题所在,假设您有一个数据集,如下所示(它超出了时间2,但这只是一个要使用的样本):

import pandas as pd

data = pd.DataFrame({
    'time': [1, 1, 1, 2, 2, 2],
    'names': ["Andy", "Bob", "Karen", "Andy", "Matt", "Sim"],
    'val': [1, 2, 3, 5, 6, 8]
})

编写一个函数来计算每个时间点之前的平均值,但不计算重复的名字.也就是说,时间1的平均值是(1+2+3)/3,时间2的平均值不包括安迪的第一个值‘1’,我只包括最近的值,所以时间2的平均值是(2+3+5+6+8)/5.

我试着创建了两个词典,一个用来存储"时间"计数,另一个用来记录"名字"和"价值",但我不知道如何从那里着手,也不知道如何想出一个有效的解决方案,所以我不会在每一步重新计算手段(这是面试的另一项要求).

它不一定是Pandas 解决方案,数据表单可以是您喜欢的任何形式.我只是把它作为Pandas 的df呈现出来.

推荐答案

IIUC,您希望计算截至当前时间的mean个值,同时只考虑最后看到的重复值(if any).如果是这样的话,这里有一个潜在的 Select ,在for-loop中使用boolean indexing来构建扩展窗口:

# uncomment if necessary
# data.sort_values("time", inplace=True)

to_keep = "last" # duplicate

means = {}
for t in data["time"].unique():
    window = data.loc[data["time"].le(t)]
    m = ~window["names"].duplicated(to_keep)
    means[t] = window.loc[m, "val"].mean()

输出(means):

{ # time|mean
    1: 2.0, #  (1+2+3)/3
    2: 4.8, #  (2+3+5+6+8)/5
}

Python相关问答推荐

无法通过python-jira访问jira工作日志(log)中的 comments

运行终端命令时出现问题:pip start anonymous"

如何记录脚本输出

为什么这个带有List输入的简单numba函数这么慢

在Mac上安装ipython

PyQt5,如何使每个对象的 colored颜色 不同?'

我对我应该做什么以及我如何做感到困惑'

如何在Polars中从列表中的所有 struct 中 Select 字段?

在Django admin中自动完成相关字段筛选

在单次扫描中创建列表

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

计算空值

如何按row_id/row_number过滤数据帧

pandas fill和bfill基于另一列中的条件

为什么t sns.barplot图例不显示所有值?'

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

有了Gekko,可以创建子模型或将模型合并在一起吗?

在Pandas 中以十六进制显示/打印列?

更新包含整数范围的列表中的第一个元素

Python:使用asyncio.StreamReader.readline()读取长行