首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件的drop_duplicates

有条件的drop_duplicates
EN

Stack Overflow用户
提问于 2015-10-20 14:49:38
回答 2查看 241关注 0票数 1

我希望根据列的值类型,删除数据type的重复行。例如,我的数据文件是:

代码语言:javascript
复制
A    B
3    4
3    4
3    5
yes  8
no   8
yes  8

如果df['A']是一个数字,我想要drop_duplicates()

如果df['A']是一个字符串,我希望保留副本。

因此,预期的结果将是:

代码语言:javascript
复制
A    B
3    4
3    5
yes  8
no   8
yes  8

除了使用for循环之外,还有Pythonic的方法吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-20 15:05:53

创建一个新的列C:如果A列是数字的,那么在C中分配一个公共值,否则在C中分配一个唯一的值。

在那之后,drop_duplicates就像平常一样。

注意:有一个很好的isnumeric()方法来测试单元格是否类似于数字。

代码语言:javascript
复制
In [47]:

df['C'] = np.where(df.A.str.isnumeric(), 1, df.index)
print df
     A  B  C
0    3  4  1
1    3  4  1
2    3  5  1
3  yes  8  3
4   no  8  4
5  yes  8  5
In [48]:

print df.drop_duplicates()[['A', 'B']] #reset index if needed
     A  B
0    3  4
2    3  5
3  yes  8
4   no  8
5  yes  8
票数 3
EN

Stack Overflow用户

发布于 2015-10-20 15:15:38

这个解决方案更冗长,但对于更复杂的测试可能更灵活:

代码语言:javascript
复制
def true_if_number(x):
    try:
        int(x)
        return True
    except ValueError:
        return False

rows_numeric = df['A'].apply(true_if_number)

df['A'][rows_numeric].drop_duplicates().append(df['A'][~rows_numeric])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33239863

复制
相关文章

相似问题

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