Python Pandas - 处理重复项

时间:2017-12-14 11:47:21

标签: python pandas

我想处理pandas df中的重复:

df=pd.DataFrame({'A':[1,1,1,2,1],'B':[2,2,1,2,1],'C':[2,2,1,1,1],'D':['a','c','a','c','c']})
df 

我想只保留具有A,B,C唯一值的行创建二进制列D_a和D_c,所以结果将是这样的,而不是在每行上做超慢循环..

result= pd.DataFrame({'A':[1,1,2],'B':[2,1,2],'C':[2,1,1],'D_a':[1,1,0],'D_c':[1,1,1]})

非常感谢

3 个答案:

答案 0 :(得分:3)

您可以使用:

df1 = (df.groupby(['A','B','C'])['D']
         .value_counts()
         .unstack(fill_value=0)
         .add_prefix('D_')
         .clip_upper(1)
         .reset_index()  
         .rename_axis(None, axis=1))

print (df1)
   A  B  C  D_a  D_c
0  1  1  1    1    1
1  1  2  2    1    1
2  2  2  1    0    1

答案 1 :(得分:2)

使用get_dummies + sum -

df = df.set_index(['A', 'B', 'C'])\
       .D.str.get_dummies()\
       .sum(level=[0, 1, 2])\
       .add_prefix('D_')\
       .reset_index()

df

   A  B  C  D_a  D_c
0  1  1  1    1    1
1  1  2  2    1    1
2  2  2  1    0    1

答案 2 :(得分:2)

你可以做这样的事情

df.loc[df['D']=='a', 'D_a'] = 1
df.loc[df['D']=='c', 'D_c'] = 1

这将在新列中放置1,其中每个“a”或“c”出现。

    A   B   C   D   D_a  D_c
0   1   2   2   a   1.0  NaN
1   1   2   2   c   NaN  1.0
2   1   1   1   a   1.0  NaN
3   2   2   1   c   NaN  1.0
4   1   1   1   c   NaN  1.0

但是你必须用0替换NaN。

df = df.fillna(0)

接下来,您只需选择所需的列,然后删除重复项。

df = df[["A","B","C", "D_a", "D_c"]].drop_duplicates()

希望这是您正在寻找的解决方案。