我想根据列的值类型删除数据帧的重复行。例如,我的数据框是:
A B
3 4
3 4
3 5
yes 8
no 8
yes 8
如果df['A']
是一个数字,我想drop_duplicates()
。
如果df['A']
是一个字符串,我想保留重复项。
所以期望的结果是:
A B
3 4
3 5
yes 8
no 8
yes 8
除了使用for
循环外,是否有Pythonic方法可以做到这一点?谢谢!
答案 0 :(得分:3)
创建新列C
:如果A
列为数字,请在C
中指定公共值,否则在C
中指定唯一值。
之后,正常drop_duplicates
。
注意:有一个很好的isnumeric()
方法可以测试一个单元格是否类似数字。
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
答案 1 :(得分:1)
此解决方案更详细,但对于更多涉及的测试可能更灵活:
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])