У меня есть файл Excel, который я импортировал как фрейм данных.Набор данных выглядит следующим образом:
rule_id reqid1 reqid2 reqid3 reqid4
53139 0 0 1 0
51181 1 1 1 0
50412 0 1 1 0
50356 0 0 1 0
50239 0 1 0 1
50238 1 1 1 0
50014 1 0 1 1
Я должен сравнить столбцы reqid друг с другом.Это код:
c1 = list(map(lambda a,b: a if a == b else 100*a , df.reqid1 , df.reqid2))
df['comp1'] = c1
c2 = list(map(lambda b,c: b if b == c else 100*b , df.reqid2 , df.reqid3))
df['comp2'] = c2
c3 = list(map(lambda c,d: c if c == d else 100*c , df.reqid3 , df.reqid4))
df['comp3'] = c3
comps = ['comp1' , 'comp2' , 'comp3']
df[comps] = df[comps].replace({0: np.nan})
В основном этот код сравнивает reqid1 с reqid2, reqid2 с reqid3 и так далее.Если оба столбца имеют значение 0, тогда 0 следует обновить во вновь созданном столбце, если оба столбца имеют значение 1, то 1 следует обновить во вновь созданном столбце.Если первый столбец имеет 0, а следующий столбец имеет 1, то NaN должен быть обновлен, а если первый столбец имеет 1, а второй столбец имеет 0, то 100 должно быть обновлено.Я использую другую функцию для последнего столбца.В основном это происходит, если последний столбец (в данном случае reqid4) имеет значение 1, тогда 100 следует обновить в новом столбце, а если значение 0, то 0 следует обновить.Вот код для этого:
def fun(df , col2):
df['last_comp'] = np.where((df.loc[: , col2] == 1) , 100 , 0)
return df
Вот результат, который я получаю:
rule_id reqid1 reqid2 reqid3 reqid4 comp1 comp2 comp3 last_comp
53139 0 0 1 0 NaN NaN 100.0 0
51181 1 1 1 0 1.0 1.0 100.0 0
50412 0 1 1 0 NaN 1.0 100.0 0
50356 0 0 1 0 NaN NaN 100.0 0
50239 0 1 0 1 NaN 100.0 NaN 100.0
50238 1 1 1 0 1.0 1.0 100.0 0
50014 1 0 1 1 100.0 NaN 1.0 100.0
Этот код работает для меня, но у меня есть большие наборы данных, это просточасть этих данных.У меня есть сотни столбцов, и писать этот код каждый раз для меня невозможно.Я хочу автоматизировать этот процесс сравнения одного столбца с другим, но я не знаю как.Если бы вы, парень, могли бы помочь мне, это было бы здорово.