Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于dataframe中的列创建虚拟列_Python_Pandas - Fatal编程技术网

Python 基于dataframe中的列创建虚拟列

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] =

我在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]
    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'))