gpt4 book ai didi

python - Pandas - 如何设置规则来选择要删除的重复项

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:43 25 4
gpt4 key购买 nike

我有一个数据集,其中的值位于列和索引日期时间对象中。我想要做的是删除具有相同索引(日期和时间)的值,但我想制定如下规则:

<小时/>

同一日期时间有两个值,因此我想选择最接近数字 X 的一个。该数字可以是整个数据集的平均值。

<小时/>

数据集看起来像这样(我在尝试实现它时重置了索引,因为我收到了具有多个索引的错误):

         index                  kwh
16391 2014-10-26 03:14:59 0.0514139
16392 2014-10-26 03:29:59 0.0323344
16393 2014-10-26 03:29:59 12.3
16394 2014-10-26 03:44:59 0.0595618
16395 2014-10-26 03:59:59 0.0338677

如果 X(例如平均值)是 0.05,那么我想要返回的是

16391   2014-10-26 03:14:59     0.0514139
16392 2014-10-26 03:29:59 0.0323344
16393 2014-10-26 03:44:59 0.0595618
16394 2014-10-26 03:59:59 0.0338677

我尝试过使用 groupby 并以几种不同的方式应用,但我无法让它工作。请问有什么帮助吗?

最佳答案

如果添加 dist测量绝对距离的 DataFrame 列之间kwhX :

X = df['kwh'].mean()
df['dist'] = (df['kwh'] - X).abs()

然后你可以按index分组并找到最小 dist 的唯一整数索引对于每个组:

idx = df.groupby(['index'])['dist'].transform(lambda x: x == x.min()).astype(bool)

然后您可以使用 df.loc 选择这些行:

df.loc[idx]
<小时/>

如果data包含(注意相同的 kwh 的重复值 index ):

         index                  kwh
16391 2014-10-26 03:14:59 0.0514139
16392 2014-10-26 03:29:59 0.0323344
16392 2014-10-26 03:29:59 0.0323344
16393 2014-10-26 03:29:59 12.3
16394 2014-10-26 03:44:59 0.0595618
16395 2014-10-26 03:59:59 0.0338677

然后

import pandas as pd

df = pd.read_table('data', sep='\s{2,}')
print(df)
X = df['kwh'].mean()
df['dist'] = (df['kwh'] - X).abs()
idx = df.groupby(['index'])['dist'].transform(lambda x: x == x.min()).astype(bool)
print(df.loc[idx])

产量

                     index       kwh      dist
16391 2014-10-26 03:14:59 0.051414 2.033505
16392 2014-10-26 03:29:59 0.032334 2.052584
16392 2014-10-26 03:29:59 0.032334 2.052584
16394 2014-10-26 03:44:59 0.059562 2.025357
16395 2014-10-26 03:59:59 0.033868 2.051051

请注意,通过使用 transform在这里,我们得到一个 bool 掩码,它允许我们选择所有行 - 包括那些具有重复值 kwh 的行-- 距 X 的最小距离.

<小时/>

您可以使用del df['dist']当您不再需要 dist 列时将其删除。

关于python - Pandas - 如何设置规则来选择要删除的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com