python - 通过 value_counts() 将数据帧划分为两个 DF
问题描述
我的框架:
name rs number
11 5566 64882
41 534326 5345
11 5566 3312
44 2341 5553
1 6223 2333
它有 700k+ 行。
df.rs.value_counts() =
5566 2
534326 1
2341 1
6223 1
我需要通过 value_counts 将该帧分配给其他 2 个较小的帧。我的意思是: inUniqueDF
应该只有没有 rs 重复的行:
name rs number
41 534326 5345
44 2341 5553
1 6223 2333
并且 inDuplicatedDF
应该只是重复(所有重复的行,因为 rs 可能相同,但另一个 cols 具有不同的值):
name rs number
11 5566 64882
11 5566 3312
我试过这样的事情:
Duplicate_rs_df = df.drop(df.index[np.where(df.rs.value_counts() <1)])
unique1 = df.drop(df.index[np.where(df.rs.value_counts() >1)])
但是,当我通过 couts_values 检查 dfs 时,两者仍然有重复。我的代码有什么问题,我该如何以更好的方式做到这一点?
解决方案
使用pandas.DataFrame.drop_duplicates
和:duplicated
_keep=False
给定df
:
name rs number
0 11 5566 64882
1 41 534326 5345
2 11 5566 3312
3 44 2341 5553
4 1 6223 2333
使用drop_duplicates
:
uniq_df = df.drop_duplicates('rs', False)
print(uniq_df)
name rs number
1 41 534326 5345
3 44 2341 5553
4 1 6223 2333
并使用duplicated
:
dup_df = df[df.duplicated('rs', False)]
print(dup_df)
name rs number
0 11 5566 64882
2 11 5566 3312
甚至更简单,df.duplicated('rs', False)
仅使用:
ind = df.duplicated('rs', False)
print(df[~ind])
name rs number
1 41 534326 5345
3 44 2341 5553
4 1 6223 2333
print(df[ind])
name rs number
0 11 5566 64882
2 11 5566 3312
推荐阅读
- asp.net-core - 与剃刀选择助手斗争
- delphi - 如何让 IDE 了解使用我的包的项目中使用的单元?
- java - Axon 抱怨 com.thoughtworks.xstream.converters.ConversionException:调用方法失败
- python - 如何通过有线局域网从 4g 路由器读取短信
- python - 使用 matplotlib 正确显示图形
- google-apps-script - 如何将单元格(日期共振峰)中的值与脚本中的今天日期进行比较
- mysql - MySQL 关系中的 Loopback 4 和约束
- django - Django 模板意外遗漏了 Elasticsearch 的结果
- react-native - 在 Redux 的操作中,使用回调调用函数(使用 async/await 和 React-Native-Contacts)
- wolfram-language - 绘制函数时显示的空白图