繁体   English   中英

从 Pandas Dataframe 中删除唯一值的最佳方法是什么?

[英]What is the best way to delete unique values from Pandas Dataframe?

我有 5 个文本文件数据集加载为 Pandas Dataframe(data1,data2,...,data 5;每个都是 mx2 列:SSID,RSSI)。

典型的数据集如下所示(为了可重复的示例,使用pd.DataFrame编写):

import pandas as pd
data1 = pd.DataFrame([['A', -70], ['B', -65], ['C', -55]], columns=['SSID', 'RSSI'])

我的主要目标是找到在所有 5 个测量数据集中找到的每个重复 SSID 的平均 RSSI 值。

但首先,我想删除所有具有唯一 SSID 的行(即 SSID 值不会出现在所有 5 个数据集中)

我尝试通过连接前 2 个数据集来使用pd.duplicated方法:

frames1 = [data1, data2]
df1 = pd.concat(frames1)

然后,删除所有唯一的 SSID:

dupes1 = df1[df1.duplicated('SSID') | df1.duplicated('SSID', keep='last')]

但是,当我尝试对其余数据集再次执行相同操作时,重复的dupes重复数据中的行数不断增加,而不是最终收敛到相同的数字。

frames2 = [dupes1,data3]
df2 = pd.concat(frames2)
dupes2 = df2[df2.duplicated('SSID') | df2.duplicated('SSID', keep='last')]

有没有更好的方法从多个数据框中删除唯一值?

编辑:我发现我发布的方法仅适用于 2 个数据集。 行数不断增加,因为concat()也连接:

  1. 由于行号导致的任何缺失值 (NaN) 对于每个数据集都可能不同
  2. 数据集中存在 SSID 值 > 2 的任何重复行

如何使用sets执行相交操作,然后使用相交过滤所有 DataFrame? 就像是...

dfs = [data1, data2, data3, data4, data5]
SSID_sets = [set(df['SSID']) for df in dfs]
duplicated_SSIDs = set.intersection(*SSID_sets)
dfs_filtered = [df[df['SSID'].isin(duplicated_SSIDs)] for df in dfs]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM