asb*_*asb 11 duplicates pandas
我有一个数据集,可能有重复的标识符记录appkey.理想情况下,重复的记录应该不存在,因此我将它们视为数据收集错误.我需要删除appkey多次出现的所有实例.
该drop_duplicates方法在这种情况下是无效的(或者是?),因为它选择了第一个或最后一个重复项.是否有任何明显的成语用熊猫实现这一目标?
截至pandas版本0.12,我们有filter此.它完全符合@Andy的解决方案所使用的功能transform,但更简洁,更快一些.
df.groupby('AppKey').filter(lambda x: x.count() == 1)
Run Code Online (Sandbox Code Playgroud)
窃取@Andy的例子,
In [1]: df = pd.DataFrame([[1, 2], [1, 4], [5, 6]], columns=['AppKey', 'B'])
In [2]: df.groupby('AppKey').filter(lambda x: x.count() == 1)
Out[2]:
AppKey B
2 5 6
Run Code Online (Sandbox Code Playgroud)
这是一种方法,使用带有count 的变换:
In [1]: df = pd.DataFrame([[1, 2], [1, 4], [5, 6]], columns=['AppKey', 'B'])
In [2]: df
Out[2]:
AppKey B
0 1 2
1 1 4
2 5 6
Run Code Online (Sandbox Code Playgroud)
通过AppKey列进行分组并应用转换计数,意味着计算每次出现的AppKey,并将计数分配给出现的那些行:
In [3]: count_appkey = df.groupby('AppKey')['AppKey'].transform('count')
In [4]: count_appkey
Out[4]:
0 2
1 2
2 1
Name: AppKey, dtype: int64
In [5]: count_appkey == 1
Out[5]:
0 False
1 False
2 True
Name: AppKey, dtype: bool
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其用作原始DataFrame的布尔掩码(仅保留AppKey恰好出现一次的那些行):
In [6]: df[count_appkey == 1]
Out[6]:
AppKey B
2 5 6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |