Python для возврата определенного столбца с использованием понимания списка или применения()

Я пытаюсь преобразовать код R в код Python и застрял на этом этапе. Можете ли вы сказать мне, как лучше всего реализовать этот фрагмент кода в Python?

only0_0$count =0
for(i in 2:length(only0_0$ID))
{
    only0_0$count[i]=ifelse((only0_0$year[i]-1) %in% 
    clientData$Year[clientData$CUSTOMERID %in% only0_0$ID[i]],1,0)
}

Задний план:

  1. И clientData, и only0_0 являются кадрами данных.
  2. Данные клиента {столбцы: год, CustomerID, ...}
  3. only0_0 {столбцы: год, идентификатор}
  4. ID и CustomerID представляют одно и то же и не уникальны в соответствующей таблице.
  5. Сортировать только0_0 по {'ID','году'}

Псевдокод:

  1. В only0_0 создайте новый столбец «count» со всеми нулями.
  2. для цикла, начинающегося со второго наблюдения до последнего, заполните переменную count следующим образом:

    • выберите все «CustomerID» из clientData, где «ID» только в 0_0 соответствует определенной строке.
    • например только0_0.ID == 3197
    • clientData.CustomerID вернет идентификаторы всех строк с идентификатором клиента = 3197.
    • например вывод последнего шага: rowid(или index в Python) {3,11, 81, 87}
    • извлечь соответствующие значения года из идентификаторов строк, возвращенных с последнего шага
    • например вывод последнего шага: {2006, 2008, 2009, 2006}

    • скажем: вывод (only0_0.year - 1) == 2008

    • с 2008 г. находится в {2006, 2008, 2009, 2006}, количество = 1

Дайте мне знать, если это ясно сейчас.

Можете ли вы превратить его в псевдокод или грубый код C? (не нужно запускать) Легко дать вам краткое решение на Python, но его довольно сложно прочитать r до такой степени без опыта в этом.

Error - Syntactical Remorse 29.05.2019 15:37

Добавлен псевдокод. Дайте мне знать, если это поможет.

Ashu 29.05.2019 15:48

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

Error - Syntactical Remorse 29.05.2019 15:50

Также добавлен пример.

Ashu 29.05.2019 16:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
230
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не зная, что такое only0_0 и clientData конкретно, это довольно сложно, но вот несколько фрагментов, которые должны вам помочь:

Я предполагаю, что only0_0 — это pandas.DataFrame, а clientData словарь, потому что он не содержит унифицированных данных.

Так, например.

import pandas as pd
clientData = {'Year': [..., ...], 'CUSTOMERID_transformed': ....}
only0_0 = pd. DataFrame({'count': [1, 2, 3, ...], 'year': [2010, 2012, 2019, ...]})
only0_0.loc[i, 'count'] = 0
for i in range(1, only0_0.shape[0]):    # i.e. skipping the first row
   only0_0.loc[i, 'count'] = 0 if ... else 1

или

... = int(1-bool(...))

но я думаю, что писать более питонически

if ...:
    only0_0.loc[i, 'count'] = 0
else:
    only0_0.loc[i, 'count'] = 1

Теперь о состоянии, я думаю, что это что-то, состоящее из

(only0_0.loc[i, 'year'] - i) in clientData['Year'][...]

а также

clientData['CUSTOMERID_transformed'] in only0_0.loc[i, 'ID0_0']

Обновлено: Ваша заметка предполагает скорее

only0_0.loc[i, 'ID0_0'] in clientData['CUSTOMERID_transformed'] 

Я надеюсь, что это поможет вам идти.

Спасибо. Попробую это реализовать. Будет обновлять вас.

Ashu 29.05.2019 16:33

Большое спасибо. Я получил ответ в соответствии с вашим предложением.

Ashu 29.05.2019 17:00

Спасибо, я получил ответ.

    if ((only0_0.year[i] - 1) in (clientData['Year'][clientData['CUSTOMERID_transformed'] == only0_0.loc[i, 'ID0_0']].values)):
        only0_0.loc[i,"count"]=1
    else:
        only0_0.loc[i,"count"]=0

Другие вопросы по теме