首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据另一列的条件删除列中具有重复值的行- Python/Pandas

根据另一列的条件删除列中具有重复值的行- Python/Pandas
EN

Stack Overflow用户
提问于 2022-11-03 19:13:22
回答 1查看 26关注 0票数 1

我将CSV文件中的数据读入Pandas dataframe (所有单元格都具有字符串类型,NaN:s已被替换为“已经”),有一些需要删除的重复值。

样本输入CSV:

代码语言:javascript
复制
Col1,Col2,Col3
A,rrrrr,fff
A,,ffff
B,rrr,fffff
C,,ffffff
D,rrrrrrr,ffff
C,rrrr,fffff
E,rrrrr,fff
C,,kkkkk

我需要删除那些在Col1中具有重复值且Col2值为"“的行。因此,期望的结果如下:

代码语言:javascript
复制
Col1,Col2,Col3
A,rrrrr,fff
B,rrr,fffff
D,rrrrrrr,ffff
C,rrrr,fffff
E,rrrrr,fff

我使用以下代码行来消除重复:

代码语言:javascript
复制
my_df = my_df.loc[(my_df["Col2"] != "") | ~my_df["Col1"].duplicated()]

它用Col1中的重复项移除一些但不是所有想要的行。如果这样的“重复行”出现在将保留的行(作为非空的Col2)之前,它将不会被删除,我的代码给出了如下结果:

代码语言:javascript
复制
Col1,Col2,Col3
A,rrrrr,fff
B,rrr,fffff
C,,ffffff
D,rrrrrrr,ffff
C,rrrr,fffff
E,rrrrr,fff

正如您所看到的,A的副本被正确删除,而对于C,其中一个副本(将保留的行之前出现的副本)保持不变。

有什么建议怎么解决吗?我可能漏掉了什么东西在我眼皮底下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-03 19:24:45

您可以计算Col1中每个值的计数,然后使用该computed_countpandas.Series.isna()获取所需的值。

代码语言:javascript
复制
df['cnt_col1'] = df.groupby('Col1')['Col1'].transform('count')
m = (df["Col2"].isna()) & (df["cnt_col1"]>1)
df_new = df[~m].drop('cnt_col1', axis=1)
print(df_new)

或没有团体:

代码语言:javascript
复制
cnt = dict(df['Col1'].value_counts())
cnt_col1 = df['Col1'].map(cnt)
m = (df["Col2"].isna()) & (cnt_col1>1)
print(df[~m])

输出:

代码语言:javascript
复制
  Col1     Col2   Col3
0    A    rrrrr    fff
2    B      rrr  fffff
4    D  rrrrrrr   ffff
5    C     rrrr  fffff
6    E    rrrrr    fff
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74308446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档