使用基于行索引 0 中的值的循环填充列

populate column using loop based on value in row index 0

我有一个 DataFrame,我想在其中填充当前只有第一行有日期的列,该列中的所有其他行都是空白的 (None)。

使用 df['date'] 列的索引行 0 中的值,我编写了一个循环,在每个后续行中为我提供一个日期,该日期比上一行中的日期早 7 天.

import numpy as pd

first_date = pd.to_datetime(df['date'].loc[0])


date_list = [first_date]
count = 0
while count < (len(df) -1):
    count +=1
    print(count)
    subtract_days = count * 7
    latest_date = first_date  - timedelta(days=subtract_days)
    print(latest_date)
    date_list.append(latest_date)

print(date_list)

df['date_1'] = date_list

但是,这需要创建一个新的列 df['date_1'],删除现有的 df['date'] 并重命名新的。

执行相同操作的更有效方法是什么?

你可以尝试使用pd.date_range:

# set your date column as index
df.set_index('date', inplace=True)

# generate dates for 7 days descending for periods equal to length of the dataframe
df.index = pd.date_range(start=df.index[0], freq='-7d', periods=df.shape[0])

这也可以在不设置为索引的情况下完成。

df['date'] = pd.date_range(start=df.iloc[0]['date'], freq='-7d', periods=df.shape[0])