微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-如何区分与pandas数据框所有行中相同的列?

我有一个像下面的数据框-

df1_data = {'sym' :{0:'AAA',1:'BBB',2:'CCC',3:'DDD',4:'DDD',5:'CCC'},
        'id' :{0:'101',1:'102',2:'103',3:'104',4:'105',5:'106'},
        'sal':{0:'1000',1:'1000',2:'1000',3:'1000',4:'1000',5:'1000'},
        'loc':{0:'zzz',1:'zzz',2:'zzz',3:'zzz',4:'zzz',5:'zzz'},
        'name':{0:'abc',1:'abc',2:'abc',3:'pqr',4:'pqr',5:'pqr'}}
df = pd.DataFrame(df1_data)
print df

    id  loc name   sal  sym
0  101  zzz  abc  1000  AAA
1  102  zzz  abc  1000  BBB
2  103  zzz  abc  1000  CCC
3  104  zzz  pqr  1000  DDD
4  105  zzz  pqr  1000  DDD
5  106  zzz  pqr  1000  CCC

我想检查上述数据框的哪些列在所有行中都包含相同的值.根据该要求,我希望在一个数据框中使用这些相同的列,而在另一数据框中使用不匹配的列.

预期产量-

matched_df-

   loc   sal
0  zzz  1000
1  zzz  1000
2  zzz  1000
3  zzz  1000
4  zzz  1000
5  zzz  1000

unmatched_df-

    id name  sym
0  101  abc  AAA
1  102  abc  BBB
2  103  abc  CCC
3  104  pqr  DDD
4  105  pqr  DDD
5  106  pqr  CCC

解决方法:

您可以通过eq将df与第一行进行比较,然后通过all检查所有True值:

print (df.eq(df.iloc[0]))
      id   loc   name   sal    sym
0   True  True   True  True   True
1  False  True   True  True  False
2  False  True   True  True  False
3  False  True  False  True  False
4  False  True  False  True  False
5  False  True  False  True  False

mask = df.eq(df.iloc[0]).all()
print (mask)
id      False
loc      True
name    False
sal      True
sym     False
dtype: bool
print (df.loc[:, mask])
   loc   sal
0  zzz  1000
1  zzz  1000
2  zzz  1000
3  zzz  1000
4  zzz  1000
5  zzz  1000

print (df.loc[:, ~mask])
    id name  sym
0  101  abc  AAA
1  102  abc  BBB
2  103  abc  CCC
3  104  pqr  DDD
4  105  pqr  DDD
5  106  pqr  CCC

屏蔽的另一种方法是比较numpy数组:

arr = df.values
mask = (arr == arr[0]).all(axis=0)
print (mask)
[False  True False  True False]

print (df.loc[:, mask])
   loc   sal
0  zzz  1000
1  zzz  1000
2  zzz  1000
3  zzz  1000
4  zzz  1000
5  zzz  1000

print (df.loc[:, ~mask])
    id name  sym
0  101  abc  AAA
1  102  abc  BBB
2  103  abc  CCC
3  104  pqr  DDD
4  105  pqr  DDD
5  106  pqr  CCC

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐