Как правило, это всегда будет столбец, который содержит «ACD» минус столбец, который содержит «ECD».
В этом ответе предполагается, что заголовки столбцов не шумные, т. Е. Отличаются только «ACD» / «ECD» и точно такие же, кроме (включая верхний / нижний регистр). Также предполагается, что всегда есть соответствующий столбец. Этот код не проверяет, перезаписывает ли он столбец, в который записывается разница дат.
Этот подход работает в линейном времени, поскольку мы перебираем набор столбцов один раз и напрямую обращаемся к соответствующему столбцу по имени.
test.csv
Site Visit ECD,Site Visit ACD,Sold ECD (Loc A),Sold ACD (Loc A)
2018-06-01,2018-06-04,2018-07-05,2018-07-06
2017-02-22,2017-03-02,2017-02-27,2017-03-02
Код
import pandas as pd
df = pd.read_csv("test.csv", delimiter=",")
for col_name_acd in df.columns:
# Skip columns that don't have "ACD" in their name
if "ACD" not in col_name_acd: continue
col_name_ecd = col_name_acd.replace("ACD", "ECD")
# we assume there is always a matching "ECD" column
assert col_name_ecd in df.columns
col_name_diff = col_name_acd.replace("ACD", "Cycle Time")
df[col_name_diff] = df[col_name_acd].astype('datetime64[ns]') - df[col_name_ecd].astype('datetime64[ns]')
print(df.head())
выход
Site Visit ECD Site Visit ACD Sold ECD (Loc A) Sold ACD (Loc A) \
0 2018-06-01 2018-06-04 2018-07-05 2018-07-06
1 2017-02-22 2017-03-02 2017-02-27 2017-03-02
Site Visit Cycle Time Sold Cycle Time (Loc A)
0 3 days 1 days
1 8 days 3 days