将数据帧除以两个DF值\u counts()

2024-09-29 21:56:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的框架:

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

我需要通过数值计算把这帧预测到另外两个更小的帧。 我的意思是:UniqueDF中应该只有没有rs重复的行:

    name    rs      number
    41      534326   5345
    44      2341     5553
    1       6223     2333

DuplicatedDF中应该只有重复(所有重复的行,因为rs可以相同,但另一个col的值不同):

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)])

但是当我检查dfs by couts\u值时,它们仍然有重复。 我的代码中有什么错误,如何才能以更好的方式做到这一点


Tags: name框架numberdfindexvaluenpwhere
2条回答

^{}^{}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

您可以将两个df保存在一个dict中:

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

相关问题 更多 >

    热门问题