在Pandas DataFrame(时间序列)的列中查找具有不同值的所有行

时间:2018-11-05 16:12:47

标签: python pandas duplicates

假设我在Python中有一个pandas DataFrame,它显示了一段时间内不同部门的业务部门负责人的姓名。看起来像this 可以像这样重新创建:

import pandas as pd
import numpy as np

d = pd.DataFrame({'Boss_January': ['Nina', 'Lena', 'Max', np.NaN], 'Boss_February': ['Nina', 'Emilia','Max','Leonie'],'Boss_March':['Nina','Lena','Mark','Leonie']})

我想查找业务部门负责人发生变化的单位,即不同列中的值不完全相同的行。

由于单位领导者的变化(和缺失值),结果应包括单位1,单位2和单位3,但不包括单位0。

由于实际的DataFrame具有更多的列,所以我不想通过遍历行并检查 Boss_January == Boss_February == Boss_March 来检查所有值。

2 个答案:

答案 0 :(得分:2)

您可以检查第一个序列是否相等,测试所有值是否为True,然后取负数:

res = df[~df.eq(df.iloc[:, 0], axis=0).all(1)]

print(res)

  Boss_February Boss_January Boss_March
1        Emilia         Lena       Lena
2           Max          Max       Mark
3        Leonie          NaN     Leonie

如果只需要索引,则不需要子集数据框:

bools = ~df.eq(df.iloc[:, 0], axis=0).all(1)
idx = bools[bools].index

print(idx)

Int64Index([1, 2, 3], dtype='int64')

答案 1 :(得分:1)

您可以将applyaxis=1一起使用来聚合列,并要求在所有列中有多个unique元素,例如:

d[d.apply(lambda x: len(x.unique())!=1, axis=1)]