熊猫:删除具有相同“四舍五入”值的重复行而不创建新列

时间:2018-09-25 05:55:02

标签: python python-2.7 pandas

我想删除BC列中的值四舍五入后等于的重复行

import pandas as pd
df = pd.DataFrame({"A":["f1", "f2", "f3", "f4"], "B":[1.2579,1.2586,1.7223,1], "C":[8.2579,8.2586,12.7223,14.0]})

   A       B        C
0  f1  1.2579   8.2579
1  f2  1.2586   8.2586
2  f3  1.7223  12.7223
3  f4  1.0000  14.0000

此处,行01在四舍五入后具有相同的值。代替创建列B_roundC_round来删除重复项

df['B_round'] = df['B'].values.round(2)
df['C_round'] = df['C'].values.round(2)
df = df.drop_duplicates(subset=['B_round', 'C_round'], keep='first')

我必须再次删除列

df = df.drop(['B_round', 'C_round'], axis=1)
   A       B        C
0  f1  1.2579   8.2579
2  f3  1.7223  12.7223
3  f4  1.0000  14.0000

因为我的真实数据很大。有没有一种方法可以删除它们而不创建新的列集?

1 个答案:

答案 0 :(得分:0)

DataFrame.duplicated~boolean indexing的布尔掩码求反:

df = df[~df[['B', 'C']].round(2).duplicated()]

print (df)
    A       B        C
0  f1  1.2579   8.2579
2  f3  1.7223  12.7223
3  f4  1.0000  14.0000

另一种解决方案-乘以100并将值转换为integer s:

df = df[~df[['B', 'C']].mul(100).astype(int).duplicated()]