如果最新值代表当前值的某个百分比,则使用最新值的表

2024-09-30 22:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在海量数据集中找到某些ID和代码的值,我试图通过获取每个唯一对最近使用的值来获得这些值。我目前正在使用下面的代码获取最近使用的代码

data.head()
    ID      Code    value
15  13513   X2784   30.0
16  12665   X2744   65.0
17  16543   X2744   65.0
19  15761   X2100   29.0
21  14265   X2750   48.0

df = data.pivot_table(index='ID', columns='Code', values='value', aggfunc = 'first')

df.head()
ID      X2784   X2744   X2100   X2750
13271   30.0    65.0    29.0    35.0
16343   30.0    65.0    29.0    35.0
19342   30.0    65.0    29.0    35.0
15437   30.0    65.0    29.0    35.0
14359   30.0    65.0    29.0    48.0

问题在于,由于数据异常,其中一些值是错误的。我们的想法是查看最近的值,确定它是否代表该对所有值的某个百分比,然后分配它。问题的一个例子如下:

data[(data['ID'] == '14359') & (data['Code'] == 'X2750')]['value'].value_counts()
35.0     2530
48.0        2

值29.0是最近发生的事件,但它发生的次数非常少,因此应将其视为异常。有没有办法将pivot_表aggfunc“first”与某种阈值结合起来


Tags: 数据代码iddfdatavaluecodehead
2条回答

我可以使用aggfunc的lambda函数来计算它

aggfunc = lambda x: x.iloc[0] if x.value_counts()[x.iloc[0]]/x.value_counts().sum() > .25 else x.mode(dropna = False).iat[0]

谢谢大家的帮助

如果您确信多数始终是您希望的值,则可以使用中值聚合来获得“中间”或“50%分位数”值。这将切断所有异常情况

尝试此功能:

df = data.pivot_table(index='ID', columns='Code', values='value', aggfunc = 'first', aggfunc=np.median)

相关问题 更多 >