在对python进行分组和排序后删除相似的数据
Posted
技术标签:
【中文标题】在对python进行分组和排序后删除相似的数据【英文标题】:removing similar data after grouping and sorting python 【发布时间】:2022-01-22 18:22:02 【问题描述】:我有这些数据:
lat = [79.211, 79.212, 79.214, 79.444, 79.454, 79.455, 82.111, 82.122, 82.343, 82.231, 79.211, 79.444]
lon = [0.232, 0.232, 0.233, 0.233, 0.322, 0.323, 0.321, 0.321, 0.321, 0.411, 0.232, 0.233]
val = [2.113, 2.421, 2.1354, 1.3212, 1.452, 2.3553, 0.522, 0.521, 0.5421, 0.521, 1.321, 0.422]
df = pd.DataFrame("lat": lat, 'lon': lon, 'value':val)
我将它按 lat & lon 分组,然后按 value 列排序并取前 5 位,如下所示:
grouped = df.groupby(["lat", "lon"])
val_max = grouped['value'].max()
df_1 = pd.DataFrame(val_max)
df_1 = df_1.sort_values('value', ascending = False)[0:5]
我得到的输出是这样的:
value
lat lon
79.212 0.232 2.4210
79.455 0.323 2.3553
79.214 0.233 2.1354
79.211 0.232 2.1130
79.454 0.322 1.4520
我想删除上述任何一项的最后一个小数位 1 以内的任何行。所以我们看到第 1 行与第 4 行的位置几乎相同,第 2 行与第 5 行的位置几乎相同,因此第 4 和第 5 将被下一个排名的 lat lon 替换,这将产生输出:
value
lat lon
79.212 0.232 2.4210
79.455 0.323 2.3553
79.214 0.233 2.1354
82.343 0.321 0.5421
82.111 0.321 0.5220
请告诉我该怎么做。
【问题讨论】:
我认为您的意思是“行”,而不是“列”。如果在删除相似的行之后,你最终得到了另一对相似的行,你是否要删除它们? 谢谢,是的,我的意思是排。我已经改变了。是的,我也想删除它们。 @ThisFieldIsRequired 你知道怎么做吗? 如果不需要继续删除类似的,我想我会知道该怎么做。 能否请您告诉我该怎么做,然后我看看是否可以编辑它? 【参考方案1】:您可以对数据框进行排序,如下所示:
grouped = df.groupby(["lat", "lon"])
val_max = grouped["value"].max()
df_1 = pd.DataFrame(val_max)
df_1 = (
df_1.sort_values("value", ascending=False).reset_index().sort_values(["lat", "lon"])
)
然后,对每一行进行迭代并将其与前一行进行比较,找到并删除相似的行:
# Find similar rows and mark them in a new "match" column
df_1["match"] = ""
for i in range(df_1.shape[0] + 1):
if i == 0:
continue
df_1.loc[
(df_1.iloc[i, 0] - df_1.iloc[i - 1, 0] <= 0.001)
| (df_1.iloc[i, 1] - df_1.iloc[i - 1, 1] <= 0.001),
"match",
] = pd.NA
# Remove empty rows
df_1 = df_1.dropna(how="all").reset_index(drop=True)
# Remove unwanted rows and cleanup
index = [i - 1 for i in df_1[df_1["match"].isna()].index]
df_1 = df_1.drop(index=index).drop(columns="match").reset_index(drop=True)
哪些输出:
print(df_1)
lat lon value
0 79.212 0.232 2.4210
1 79.214 0.233 2.1354
2 79.444 0.233 1.3212
3 79.455 0.323 2.3553
4 82.111 0.321 0.5220
5 82.122 0.321 0.5210
6 82.231 0.411 0.5210
7 82.343 0.321 0.5421
【讨论】:
以上是关于在对python进行分组和排序后删除相似的数据的主要内容,如果未能解决你的问题,请参考以下文章