Проверьте дубликаты между столбцами строки - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь пройтись по циклу данных, чтобы проверить, есть ли какие-либо дубликаты в столбцах определенной строки, и тогда результат должен вернуть всю строку. Столбец, в котором я заинтересован, поднимается от Prod_code_1 до Prod_code_47. Часть моей проблемы заключается в том, как отформатировать имя столбца при сравнении, если значение в одном столбце для этой строки совпадает со смежным столбцом для этой строки.

Если в столбцах определенной строки есть дубликаты, результат должен вернуть всю строку / True.

Столбцы, которые мне нужны, выглядят примерно так (в кадре данных есть куча других столбцов, а не только те, что показаны ниже):

Prod_code_1  | Prod_desc_1 | Prod_code_2 | Prod_desc_2 | 
DIS          | DIS         | DIS         | DIS         |  (returns true)
DIS          | DIS         | DIS         | UVA         |  (returns false)

И мой код:

for index, row in df.iterrows():
    for i in range(1,len(df)):
        if df['Prod_code_'+str(i)][row] == df['Prod_code_'+str(i+1)][row]:
             print(row)

Ошибка, которую я получаю:

правда серии неоднозначна. Используйте a.empty, a.bool (), a.item (), a.any (), a.all ()

Я знаю, что это должна быть относительно прямолинейная операция, но я застрял и задаюсь вопросом, знает ли кто-нибудь простое решение для моего запроса. Буду очень признателен за любую помощь. Спасибо :).

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Ваши данные широки: есть множество полей, которые отслеживают похожие показатели. Вы можете найти полезным расплавить свой df используя df.melt().

скажем, ваш фрейм данных df и вы заинтересованы в полях list = ['prod_code_1', 'prod_code_2', ... , 'prod_code_47']

meltdf = df.melt(id_vars='some id', value_vars=list, var_name='prod_code')

теперь все ваши поля 'prod_code_ #' находятся в одном столбце. Надеюсь, это поможет вам начать в правильном направлении.

0 голосов
/ 14 марта 2019

Я предполагаю, что ваше требование следующее:

  • Вы хотите отфильтровать некоторые интересующие столбцы из большого кадра данных
  • Затем вы хотите проверить, все ли столбцыравно затем True логическое значение должно быть возвращено

Если мое понимание верно, тогда, пожалуйста, следуйте приведенному ниже решению.

  1. Шаг 1:

    • Чтобы получить ваш поднабор данных, кажется, что имена ваших столбцов следуют шаблону, мы можем использовать его в цикле и создать новый кадр данных изэто (может быть лучший способ, но я считаю, что это должно работать просто отлично)

      df_subset = pd.DataFrame() # Creating a new dataframe
      for cols in list(df.columns): # Assuming df is the original dataframe
         if 'Prod_' in cols:
            df_subset[cols] = df[cols]
      

      Это должно вернуть вам подмножество интересующих столбцов.

  2. Шаг 2:

    • У меня было похожее рабочее требование, но у меня было несколько значений np.nan в моем фрейме данных, которые нужно было игнорировать, но неудаляется при выполнении проверки.Если это так с вами, тогда, пожалуйста, смотрите ниже код другой мудрый, пожалуйста, перейдите к следующему шагу:

         for cols in list(df_subset.columns):
             df_subset.loc[df_subset[cols].isnull(),cols] = df_subset['Prod_code_1']
      

      Здесь я просто заменяю значения null в любом столбце в любой строке на значениепервый столбец (при условии, что первый столбец всегда будет содержать значение).

  3. Шаг 3:

    • Проверка, все ли значения столбца для строки равны или нет

         df_is_equal = df_subset.eq(df_subset.iloc[:,0],axis=0).all(1)
      

      Здесь я просто проверяю значение столбцов данных со значением первого столбца.Пожалуйста, следуйте документации pandas eq , чтобы узнать больше.

Эти шаги должны делать то, что вы пытаетесь там.

0 голосов
/ 13 марта 2019

Вы можете использовать атрибут is_unique , чтобы проверить, имеет ли строка только одно и то же значение.

df.apply(lambda row: row.is_unique, axis=1)

См. Также:
Series.nunique
Series.unique

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