сравнить несколько конкретных столбцов всех строк - PullRequest
0 голосов
/ 29 октября 2018

Я хочу сравнить конкретные столбцы всех строк, если они уникальны, извлечь значение в новый столбец, иначе 0.

Если пример даты, как показано ниже:

A      B      C  D  E  F
13348  judte  1  1  1  1
54871  kfzef  1  1  0  1
89983  hdter  4  4  4  4
7543   bgfd   3  4  4  4

Результат должен быть следующим:

A      B      C  D  E  F Result
13348  judte  1  1  1  1  1
54871  kfzef  1  1  0  1  0
89983  hdter  4  4  4  4  4
7543   bgfd   3  4  4  4  0

Я рад услышать некоторые предложения.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я думаю, вам нужно apply с nunique как:

df['Result'] = df[['C','D','E','F']].apply(lambda x: x[0] if x.nunique()==1 else 0,1)

Или используя np.where:

df['Result'] = np.where(df[['C','D','E','F']].nunique(1)==1,df['C'],0)

print(df)
       A      B  C  D  E  F  Result
0  13348  judte  1  1  1  1       1
1  54871  kfzef  1  1  0  1       0
2  89983  hdter  4  4  4  4       4
3   7543   bgfd  3  4  4  4       0
0 голосов
/ 29 октября 2018

Использование:

cols = ['C','D','E','F']

df['Result'] = np.where(df[cols].eq(df[cols[0]], axis=0).all(axis=1), df[cols[0]], 0)
print (df)
       A      B  C  D  E  F  Result
0  13348  judte  1  1  1  1       1
1  54871  kfzef  1  1  0  1       0
2  89983  hdter  4  4  4  4       4
3   7543   bgfd  3  4  4  4       0

Деталь

Сначала сравните все столбцы, отфильтрованные по списку имен столбцов, по eq с первым столбцом столбцов df[cols[0]]:

print (df[cols].eq(df[cols[0]], axis=0))
      C      D      E      F
0  True   True   True   True
1  True   True  False   True
2  True   True   True   True
3  True  False  False  False

Затем проверьте, все ли True с в строке по all:

print (df[cols].eq(df[cols[0]], axis=0).all(axis=1))
0     True
1    False
2     True
3    False
dtype: bool

И последнее использование numpy.where для назначения значений первого столбца для True с и 0 для False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...