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

标签 python pandas

我在 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

我收到错误'<'在'tuple'和'int'实例之间不受支持

如何解决问题

期望的输出

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 分钟,然后将第二个和第三个值替换为 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/

相关文章:

python - 将工作簿中的工作表移动到末尾

python - nums[:] = nums[::-1] 和 nums = nums[::-1] 之间的区别

python - 在 Sympy 中,什么相当于 Mathematica 的符号最小化函数?

python - 执行功能的条件

python - 生成过滤的二元笛卡尔积

python - 在 pandas 中打开文本文件时仅选择某些行

python - 如何在 Python 中获取完整的异常堆栈跟踪

python - 尝试使用 python 计算斐波那契数的最后一位时出现错误 "RuntimeWarning: overflow encountered in long_scalars"

python - 无法将 CSV 文件合并到一个数据帧中

python - Pandas 用值列表替换最小值 - 逐行