用value_counts()将数据框划分为两个DF

时间:2019-07-25 09:48:05

标签: python pandas dataframe

我的框架:

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仍然重复时。 我的代码出了什么问题?如何更好地做到这一点?

2 个答案:

答案 0 :(得分:2)

pandas.DataFrame.drop_duplicatesduplicatedkeep=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