假设我在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 来检查所有值。
答案 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)
您可以将apply
与axis=1
一起使用来聚合列,并要求在所有列中有多个unique
元素,例如:
d[d.apply(lambda x: len(x.unique())!=1, axis=1)]