如何获得行不同的不同列

时间:2018-07-09 21:06:01

标签: python python-3.x pandas

我有一个这样的数据框:

Id     Name     site                 status
1995   sachin   http://www.abcd.co   closed
1996   sachin   http://www.abcd.co   working   
1997   sourav   http://www.abcd.co   closed
1998   sourav   http://www.abcd.co   working  

,我想找出对于给定名称哪些列可能有所不同。在这种情况下,对于每个名称,站点都是相同的(始终为http://www.abcd.co),但是状态和ID都不同。 (我不在乎Id,但之后总是可以将其丢弃。)

因此对于上述数据框,如果我查看“名称”,则需要输出“状态”(或[“ Id”,“状态”])。相比之下,如果我查看“状态”列,则需要[“ Id”,“ Name”](由于status = closed,sachin和sourav之间的名称有所不同,而ID也有所不同。)

1 个答案:

答案 0 :(得分:2)

我认为这个问题并不像每个人都发现的那样令人困惑。对于固定名称,我们正在寻找不同的非ID列。我可能会做类似的事情:

multivalued = (df.drop("Id", axis=1).groupby("Name").nunique() > 1).any()
result = multivalued[multivalued].index.tolist()

这给了我

In [91]: result
Out[91]: ['status']

因为

In [97]: (df.drop("Id", axis=1).groupby("Name").nunique())
Out[97]: 
        Name  site  status
Name                      
sachin     1     1       2
sourav     1     1       2

In [98]: ((df.drop("Id", axis=1).groupby("Name").nunique()) > 1).any()
Out[98]: 
Name      False
site      False
status     True
dtype: bool