Dataframe-Python列中所有类别的公共ID

时间:2016-06-16 09:34:46

标签: python numpy pandas dataframe

我有一个数据框,其中有三列作为ID,名称和社交网站,如何找到所有社交网站/或其中任何一个的公共ID /或相关数据。数据如下

ID  Name Social_Site
1   Jon  Facebook
1   Jon  Twitter
2   Bob  Twitter
2   Bob  Linkedin
3   Tony Facebook
3   Tony Linkedin 
4   Geon Twitter
4   Geon Facebook
4   Geon Linkedin 

因此,所有网站中的常见ID是

ID Name 
4  Geon

仅在Facebook和Twitter之间

ID Name
1  Jon
4  Geon

非常感谢帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用pivot

print (df.pivot(index='ID', columns='Social_Site', values='Name'))
Social_Site Facebook Linkedin Twitter
ID                                   
1                Jon      Jon    None
2               None      Bob     Bob
3               Tony     Tony    None
4               Geon     Geon    Geon

编辑:

对于NaN使用dropna的删除行:

print (df.pivot(index='ID', columns='Social_Site', values='Name')
         .dropna())
Social_Site Facebook Linkedin Twitter
ID                                   
4               Geon     Geon    Geon

print (df.pivot(index='ID', columns='Social_Site', values='Name')[['Facebook','Twitter']]
         .dropna())

Social_Site Facebook Twitter
ID                          
4               Geon    Geon

print (df.pivot(index='ID', columns='Social_Site', values='Name')[['Facebook','Linkedin']]
         .dropna())

Social_Site Facebook Linkedin
ID                           
1                Jon      Jon
3               Tony     Tony
4               Geon     Geon

如果需要所有列,请在subset中使用参数dropna

print (df.pivot(index='ID', columns='Social_Site', values='Name')
         .dropna(subset=['Facebook','Linkedin']))

Social_Site Facebook Linkedin Twitter
ID                                   
1                Jon      Jon    None
3               Tony     Tony    None
4               Geon     Geon    Geon