gpt4 book ai didi

python - 根据数据框中的列创建虚拟列

转载 作者:行者123 更新时间:2023-12-04 08:24:47 25 4
gpt4 key购买 nike

我在 Dataframe 中有日期时间列。
我想在同一个数据框中创建一个虚拟列,这样
对于 A 值的第一行等于日期时间列的第一行 + 15 分钟
A 行的第 2 行等于 A 的第 1 行的值
A 行的第 3 行等于 A 的第 3 行的值
比 4 行再次值等于日期时间列的第 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
我收到错误 “元组”和“整数”的实例之间不支持“<”
如何解决问题
期望输出
Datetime                       Dummy
2020-16-12 09:15:00 2020-16-12 09:30:00
2020-16-12 09:20:00 2020-16-12 09:30:00
2020-16-12 09:25:00 2020-16-12 09:30:00
2020-16-12 09:30:00 2020-16-12 09:45:00
2020-16-12 09:35:00 2020-16-12 09:45:00
2020-16-12 09:40:00 2020-16-12 09:45:00

最佳答案

首先不要使用循环,因为这里有可能的矢量化替代方案。
您可以添加 15 minutes到列,然后将第 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'))

关于python - 根据数据框中的列创建虚拟列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65318428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com