![](/img/trans.png)
[英]What's the best way to replace NaN values (in a Pandas DataFrame) with values from a separate Pandas Series?
[英]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()
也连接:
如何使用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.