我将CSV文件中的数据读入Pandas dataframe (所有单元格都具有字符串类型,NaN:s已被替换为“已经”),有一些需要删除的重复值。
样本输入CSV:
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值为"“的行。因此,期望的结果如下:
Col1,Col2,Col3
A,rrrrr,fff
B,rrr,fffff
D,rrrrrrr,ffff
C,rrrr,fffff
E,rrrrr,fff
我使用以下代码行来消除重复:
my_df = my_df.loc[(my_df["Col2"] != "") | ~my_df["Col1"].duplicated()]
它用Col1中的重复项移除一些但不是所有想要的行。如果这样的“重复行”出现在将保留的行(作为非空的Col2)之前,它将不会被删除,我的代码给出了如下结果:
Col1,Col2,Col3
A,rrrrr,fff
B,rrr,fffff
C,,ffffff
D,rrrrrrr,ffff
C,rrrr,fffff
E,rrrrr,fff
正如您所看到的,A的副本被正确删除,而对于C,其中一个副本(将保留的行之前出现的副本)保持不变。
有什么建议怎么解决吗?我可能漏掉了什么东西在我眼皮底下。
发布于 2022-11-03 19:24:45
您可以计算Col1
中每个值的计数,然后使用该computed_count
和pandas.Series.isna()
获取所需的值。
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)
或没有团体:
cnt = dict(df['Col1'].value_counts())
cnt_col1 = df['Col1'].map(cnt)
m = (df["Col2"].isna()) & (cnt_col1>1)
print(df[~m])
输出:
Col1 Col2 Col3
0 A rrrrr fff
2 B rrr fffff
4 D rrrrrrr ffff
5 C rrrr fffff
6 E rrrrr fff
https://stackoverflow.com/questions/74308446
复制相似问题