比较dataframe中的多列(多于2列)

2024-09-29 21:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框

data = pd.DataFrame({'student': ['a', 'b', 'c'],
                     'rank': [2, 2, 1],
                     'rank1': [3, 3, 2],
                     'rank2': [4, 2, 3]})

我的代码

import numpy as np

data['Diff'] = np.where((data['rank'] != data['rank1']) &
                        (data['rank1'] != data['rank2']), '1', '0')

要求所有职级必须不同,然后1其他0,但我得到b也作为1


Tags: 数据代码importnumpydataframedataasnp
3条回答

我们可以^{}rank列,然后沿axis=1使用^{}检查N唯一值的出现

r = data.filter(like='rank')
data['diff'] = r.nunique(1).eq(r.shape[1]).view('i1')

  student  rank  rank1  rank2  diff
0       a     2      3      4     1
1       b     2      3      2     0
2       c     1      2      3     1

您可以使用set()并检查由所有列值构造的集合的长度是否=3:

data["Diff"] = (
    data[["rank", "rank1", "rank2"]]
    .apply(lambda x: len(set(x)) == 3, axis=1)
    .astype(int)
)
print(data)

印刷品:

  student  rank  rank1  rank2  Diff
0       a     2      3      4     1
1       b     2      3      2     0
2       c     1      2      3     1

让我们试试pd.Series.uniquelet

data['new'] = data.filter(like='rank').apply(pd.Series.unique,1).str.len().eq(3).astype(int)

Out[45]: 
0    1
1    0
2    1
dtype: int64

相关问题 更多 >

    热门问题