Во-первых, поймите, почему это не работает.Причиной того, почему это не работает, является то, что в цикле for с левой стороны (назначение) ни строки, ни индекса нигде нет.
Каждый шаг в цикле создает одно значение изаполняет его в DataFrame снова и снова:
# Iterate over each row of the DataFrame
for index , row in open.iterrows():
# count business days for current row
bday_count = np.busday_count(row['CREATE_DATE'],row['OPEN_DATE'])
# create a new column in the DataFrame
# broadcast `bday_count` to every value
open['Open_Days'] = bday_count
Таким образом, в конце столбец Open_Days
содержит bday_count
из последней строки.Все более ранние значения перезаписывались на каждой итерации.
Более ранний цикл for, который заполняет Open_Date
, может быть полностью пропущен, просто установите open['Open_Date'] = open_date
один раз.Это также может указывать на то, что это цикл, но тело не использует ни index
, ни row
!
Если вы хотите применить функцию к строкам в пандах, используйте .apply
.
df["Open_Days"] = df.apply(lambda x: np.busday_count(x.CREATE_DATE, x.OPEN_DATE), axis=1)