我的框架:
IsValid
它有700k +行。
name rs number
11 5566 64882
41 534326 5345
11 5566 3312
44 2341 5553
1 6223 2333
我需要通过value_counts将该帧划分为其他2个较小的帧。
我的意思是:在df.rs.value_counts() =
5566 2
534326 1
2341 1
6223 1
中只能是没有rs重复的行:
UniqueDF
在 name rs number
41 534326 5345
44 2341 5553
1 6223 2333
中仅应重复(所有重复的行,coz rs可以相同,但另一个cols具有不同的值):
DuplicatedDF
我尝试过这样的事情:
name rs number
11 5566 64882
11 5566 3312
但是当我检查couts_values的dfs仍然重复时。 我的代码出了什么问题?如何更好地做到这一点?
答案 0 :(得分:2)
将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
答案 1 :(得分:1)
您可以将两个df保留在字典中:
d={f'df_{i}':g for i,g in df.groupby(
np.where(df.rs.duplicated(keep=False),'duplicated','Unique'))}
print(d['df_Unique'])
name rs number
1 41 534326 5345
3 44 2341 5553
4 1 6223 2333
print(d['df_duplicated'])
name rs number
0 11 5566 64882
2 11 5566 3312