Проверьте дубликаты между столбцами строки

Итак, вот пример dateutil.relativedelta, который я нашел полезным для итерации в прошлом году, пропуская месяц каждый раз до текущей даты:

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> today = datetime.datetime.today()
>>> month_count = 0
>>> while month_count < 12:
...  day = today - relativedelta(months=month_count)
...  print day
...  month_count += 1
... 
2010-07-07 10:51:45.187968
2010-06-07 10:51:45.187968
2010-05-07 10:51:45.187968
2010-04-07 10:51:45.187968
2010-03-07 10:51:45.187968
2010-02-07 10:51:45.187968
2010-01-07 10:51:45.187968
2009-12-07 10:51:45.187968
2009-11-07 10:51:45.187968
2009-10-07 10:51:45.187968
2009-09-07 10:51:45.187968
2009-08-07 10:51:45.187968

Как и в случае с другими ответами , вам нужно выяснить, что вы на самом деле имеете в виду «через 6 месяцев». Если вы имеете в виду «сегодняшний день месяца в месяце шесть лет в будущем», тогда это будет делать:

datetime.datetime.now() + relativedelta(months=6)
0
задан skiventist 27 March 2019 в 09:43
поделиться

3 ответа

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

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

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

  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]
      

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

  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:

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

      [ 112]

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

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

0
ответ дан Harsh Gupta 27 March 2019 в 09:43
поделиться

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

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

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

0
ответ дан shanmuga 27 March 2019 в 09:43
поделиться

Ваши данные широки: есть множество полей, которые отслеживают похожие показатели. Вы можете найти полезным расплавить свой 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
ответ дан Ethan King 27 March 2019 в 09:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: