使用基于行索引 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])
我有一个 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])