#python #pandas #dataframe
Вопрос:
Я хочу написать цикл, в котором, например, если «дата заказа» равна «дате доставки», это даст мне категориальное значение (1 или 0) в новом столбце.
Ниже приведен код, который я пробовал:
pl['same_jb_sr'] = 0
for dates in pl.iterrows():
if pl['SampleReceivedDate'] != pl['JobCreationDate']:
pl.loc['same_jb_sr'] = 1
else:
pl.loc['same_jb_sr'] = 0
SampleReceivedDate и JobCreationDate имеют тип данных «Datetime64 [ns]».
Ошибка:
Значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all().
Комментарии:
1. Что такое структура данных
pl
? Словарь, фрейм даты или что-то еще? В чем заключается сообщение об ошибке? Можете ли вы включить содержаниеpl
в свой вопрос?2. Привет, pl-это фрейм данных
Ответ №1:
Вы не написали цикл. Например, см. ниже:
for pl in data:
pl['same_jb_sr'] = int(pl['SampleReceivedDate'] != pl['JobCreationDate'])
Я использовал int
здесь , поскольку операция возвращает a bool
, и при ее использовании int
она превращается в 1
if True
и 0
if False
, поэтому нет необходимости в операторе if/else.
Комментарии:
1. Привет, Джеб, я использовал ваш код, и это было сообщение об ошибке, которое я получил: «Ошибка типа: не удается преобразовать серию в <класс ‘int’>». Тип данных для «sampleReceivedDate» и «Дата создания задания» — datetime64 [ns].
Ответ №2:
Если вы все еще ищете решение:
pl["same_jb_sr"] = 0
pl.loc[pl["SampleReceivedDate"] != pl["JobCreationDate"], "same_jb_sr"] = 1
Результат для образца фрейма данных
pl = pd.DataFrame(
{"SampleReceivedDate": pd.to_datetime(["2021-01-01", "2021-01-02", "2021-01-03"]),
"JobCreationDate": pd.to_datetime(["2021-01-01", "2021-01-01", "2021-01-01"])}
)
SampleReceivedDate JobCreationDate
0 2021-01-01 2021-01-01
1 2021-01-02 2021-01-01
2 2021-01-03 2021-01-01
является
SampleReceivedDate JobCreationDate same_jb_sr
0 2021-01-01 2021-01-01 0
1 2021-01-02 2021-01-01 1
2 2021-01-03 2021-01-01 1