2017-04-10 53 views
0

所以我想重现一组指示excel到python的说明。问题是我对excel和发生的事情知之甚少。我如何从熊猫数据透视表中删除重复值?

我有一个数据帧:

no. name corrected no. corrected name 
001 alpha 001    alpha 
002 beta 002    beta 
002 beta2 002    beta 
003 gamma 003    gamma 
004 delta 104    delta 
003 omega 003    gamma 
... ...  ...    ... 

在Excel中的说明说,在“行”部分可以创建与所有这些列的数据透视表。

我已经在这两个大熊猫“GROUPBY”和“pivot_table”做到了这一点

df.groupby(['no.', 'name', 'corrected name'])[['corrected no.']].mean() 
or 
pd.pivot_table(df[['no.', 'name', 'corrected name', 'corrected no.']], index=['no.', 'name']) 

它看起来像:

no. name corrected no. corrected name 
001 alpha 001    alpha 
002 beta 002    beta 
     beta2 002    beta 
003 gamma 003    gamma 
     omega 003    gamma 
004 delta 104    delta 

现在我想从组中删除所有其他行不止一个名字。例如在这种情况下,我想删除''''''行;

是这样的:

no. name corrected no. corrected name 
001 alpha 001    alpha 
002 beta 002    beta 
003 gamma 003    gamma 
004 delta 104    delta 

所以有每个只有一个 '姓名' '没有。' 问题是一旦我得到'数据透视表',它会返回一个无法操作的表格,并且只有1列。

回答

1

作品无论哪种方式,但随着groupby结果:

df = pd.read_clipboard(sep='\s{2,}') # sample rows 

s = df.groupby(['no.', 'name', 'corrected name'])[['corrected no.']].mean() 

s 
Out[27]: 
          corrected no. 
no. name corrected name    
1 alpha alpha      1 
2 beta beta      2 
    beta2 beta      2 
3 gamma gamma      3 
    omega gamma      3 
4 delta delta      104 

s.groupby(level=['no.', 'corrected name']).first() 
Out[28]: 
        corrected no. 
no. corrected name    
1 alpha      1 
2 beta      2 
3 gamma      3 
4 delta      104 
+0

感谢。我使用'.first()',但设法通过切换列来实现第一行: df.groupby(['no。','correct name','corrected no。']) [['name']]。first() – Nadeem