Python 基于dataframe中的列创建虚拟列
我在Dataframe中有datetime列 我想在同一数据帧中创建一个虚拟列,以便 值的第一行等于datetime列的第一行+15分钟 第二行的值等于第一行的值 第三行等于第三行的值 对于4行,该值再次等于datetime列的第4行+15分钟 诸如此类 我写了这个循环,f是主数据帧Python 基于dataframe中的列创建虚拟列,python,pandas,Python,Pandas,我在Dataframe中有datetime列 我想在同一数据帧中创建一个虚拟列,以便 值的第一行等于datetime列的第一行+15分钟 第二行的值等于第一行的值 第三行等于第三行的值 对于4行,该值再次等于datetime列的第4行+15分钟 诸如此类 我写了这个循环,f是主数据帧 m15 = [] i=0, while i < len(f): m15[i] = f['Datetime'][i]+ dt.timedelta(minutes=15), m15[i+1] =
m15 = []
i=0,
while i < len(f):
m15[i] = f['Datetime'][i]+ dt.timedelta(minutes=15),
m15[i+1] = m15[i]
m15[i+2] = m15[i]
i=i+3
首先不要使用循环,因为这里有可能是矢量化的替代方案 您可以将
15分钟
添加到列中,然后将每个第2和第3个值替换为NaT
,并使用ffill
向前填充缺失的值
这里是用于组的辅助数组np.arange(len(df))
,但如果可以使用默认值RangeIndex
,则可以通过df.index
对其进行更改
#if necessary
#df['Datetime'] = pd.to_datetime(df['Datetime'], format='%Y-%d-%m %H:%M:%S')
df['New'] = (df['Datetime'].add(pd.Timedelta(minutes=15))
.mask(np.arange(len(df)) % 3 != 0)
.ffill())
print (df)
Datetime Dummy New
0 2020-12-16 09:15:00 2020-16-12 09:30:00 2020-12-16 09:30:00
1 2020-12-16 09:20:00 2020-16-12 09:30:00 2020-12-16 09:30:00
2 2020-12-16 09:25:00 2020-16-12 09:30:00 2020-12-16 09:30:00
3 2020-12-16 09:30:00 2020-16-12 09:45:00 2020-12-16 09:45:00
4 2020-12-16 09:35:00 2020-16-12 09:45:00 2020-12-16 09:45:00
5 2020-12-16 09:40:00 2020-16-12 09:45:00 2020-12-16 09:45:00
另一个想法是:
df['New'] = (df['Datetime'].add(pd.Timedelta(minutes=15))
.groupby(np.arange(len(df)) // 3)
.transform('first'))
你能添加一些样本数据吗?例如,5行和预期输出?第3行的值等于第3行的值。请阅读第3行的值等于第1行的值,我知道,但我无法测试,因为我没有你的数据。伙计,你需要提供某种形式的样本数据来处理。您好。我想在错误消息中添加一些信息。您正在编写
i=0,
。这将创建一个元组,其中一个元素等于此赋值i=(1,)
。这不能与整数进行比较。这就是为什么会出现这种类型的错误。这只是向DataFrame添加了越来越多的列,多亏了大量的工作。我不能投票给你,因为我有一个新的堆栈
df['New'] = (df['Datetime'].add(pd.Timedelta(minutes=15))
.groupby(np.arange(len(df)) // 3)
.transform('first'))