根据 Pandas 中用户指定的日期列和输入参数计算特定函数

2024-06-28

我有一个 df ,如下所示。

Date                t_factor     
2020-02-01             5             
2020-02-03             23              
2020-02-06             14           
2020-02-09             23
2020-02-10             23  
2020-02-11             23          
2020-02-13             30            
2020-02-20             29            
2020-02-29             100
2020-03-01             38
2020-03-10             38               
2020-03-11             38                    
2020-03-26             70           
2020-03-29             70 

       

由此,我想创建一个函数,该函数将根据计算值 t1、t2 和 t3 计算名为 t_function 的列。

用户将在其中输入以下参数。

Step1:
Enter start_date1 = 2020-02-01
Enter end_date1 =  2020-02-06
Enter a0 = 3
Enter a1 = 1
Enter a2 = 0

calculate t1 as number of days from start_date1 (2020-02-01) to the values in date column till end_date1.
t_function = a0 + a1*t1 + a2*(t1)**2

Step2:
Enter start_date2 = 2020-02-13
Enter end_date2 =  2020-02-29
Enter a0 = 2
Enter a1 = 0
Enter a2 = 1
calculate time_in_days as t2, which is 1 on start_date2 = 2020-02-13 and so on till end_date2
t_function = a0 + a1*t2 + a2*(t2)**2


Step3:
Enter start_date3 = 2020-03-11
Enter end_date3 =  2020-03-29
Enter a0 = 4
Enter a1 = 0
Enter a2 = 0
calculate time_in_days as t3, which is 1 on start_date2 = 2020-02-13 and so on till end_date2
t_function = t_function = a0 + a1*t3 + a2*(t3)**2

预期输出:

Date                t_factor     t1         t2         t3       t_function
2020-02-01             5          1         NaN        NaN      4
2020-02-03             23         3         NaN        NaN      6
2020-02-06             14         6         NaN        NaN      9
2020-02-09             23         NaN       NaN        NaN      NaN
2020-02-10             23         NaN       NaN        NaN      NaN
2020-02-11             23         NaN       NaN        NaN      NaN
2020-02-13             30         NaN        1         NaN      3   
2020-02-20             29         NaN        8         NaN      66
2020-02-29             100        NaN        17        NaN      291
2020-03-01             38         NaN       NaN        NaN      NaN
2020-03-10             38         NaN       NaN        NaN      NaN
2020-03-11             38         NaN       NaN        1        4 
2020-03-26             70         NaN       NaN        15       4
2020-03-29             70         NaN       NaN        18       4

笔记: 初始 start_date 即 start_date1 应该是日期列的第一个日期。 最终 end_date 是 end_date3 应该是日期列的最终日期。 未使用 t_factor 列。

我尝试下面的代码来计算 t1 之后我很困惑。因为我是 python 和 pandas 的新手

df['t1'] = (df['Date'] - df.at[0, 'Date']).dt.days + 1

我将这样做:

import pandas as pd
from io import StringIO
from datetime import datetime, timedelta
import numpy as np

df = pd.read_csv(StringIO("""Date                t_factor     
2020-02-01             5             
2020-02-03             23              
2020-02-06             14           
2020-02-09             23           
2020-02-13             30            
2020-02-20             29            
2020-02-29             100               
2020-03-11             38                    
2020-03-26             70           
2020-03-29             70 """), sep="\s+", parse_dates=[0])
df

def fun(x, start="2020-02-01", end="2020-02-06", a0=3, a1=1, a2=0):
    start = datetime.strptime(start, "%Y-%m-%d")
    end = datetime.strptime(end, "%Y-%m-%d")
    if start <= x.Date <= end:
        t2 = (x.Date - start)/np.timedelta64(1, 'D') + 1
        diff = a0 + a1*t2 + a2*(t2)**2
    else:
        diff = np.NaN
    return diff

df["t1"] = df.apply(lambda x: fun(x), axis=1)
df["t2"] = df.apply(lambda x: fun(x, "2020-02-13", "2020-02-29", 2, 0, 1), axis=1)
df["t3"] = df.apply(lambda x: fun(x, "2020-03-11", "2020-03-29", 4, 0, 0), axis=1)
df["t_function"] =  df["t1"].fillna(0) + df["t2"].fillna(0) + df["t3"].fillna(0)

df

这是输出:

 Date   t_factor    t1  t2    t3    t_function
0   2020-02-01  5   4.0 NaN   NaN   4.0
1   2020-02-03  23  6.0 NaN   NaN   6.0
2   2020-02-06  14  9.0 NaN   NaN   9.0
3   2020-02-09  23  NaN NaN   NaN   0.0
4   2020-02-13  30  NaN 3.0   NaN   3.0
5   2020-02-20  29  NaN 66.0  NaN   66.0
6   2020-02-29  100 NaN 291.0 NaN   291.0
7   2020-03-11  38  NaN NaN   4.0   4.0
8   2020-03-26  70  NaN NaN   4.0   4.0
9   2020-03-29  70  NaN NaN   4.0   4.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 Pandas 中用户指定的日期列和输入参数计算特定函数 的相关文章

  • 尝试打开 Excel 时出现“KeyError:“存档中没有名为“xl/sharedStrings.xml”的项目”

    我正在尝试使用 Python 脚本将数据导入 PowerBi 以便我可以安排它定期刷新数据 我面临着从 Excel 文件获取数据并收到错误的挑战 KeyError 没有名为 xl sharedStrings xml 的项目在档案中 导入时
  • Tastypie:GET 的身份验证和 POST 的匿名

    我使用 Django Tastypie 来管理我的用户集合 是否可以允许匿名用户在 API 中发布 在某个端点创建新用户时 并限制经过身份验证的用户仅获取自己的用户 而不是所有用户 感谢您的帮助 我发现最简单的事情就是对我正在使用的身份验证
  • 从数据框中提取具有最高值和最低值的行

    我对 R 还很陌生 我主要用它来可视化统计数据ggplot2图书馆 现在我遇到了数据准备的问题 我需要编写一个函数 该函数将从数据框中删除指定列中具有最高和最低值的一些数字 2 5 或 10 行 并将它们放入另一个数据框中 并对两个因素的每
  • 如何在不使用pygame的情况下检测按键事件和按键按住事件

    我目前正在寻找一个能够检测 监视键盘的库 我的目的是检测何时按下某个键 以及当它发生时应该发生一些事情 大多数 SO 帖子建议使用 pygame 但我发现它有点太多了 涉及一个像这样的库来完成这个简单的任务 我也尝试过pynput 这导致只
  • 如何有效地找到两个轮廓集之间的所有交点

    我想知道找到两组轮廓线之间所有交点 舍入误差 的最佳方法 哪种方法最好 这是示例 import matplotlib pyplot as plt import numpy as np x np linspace 1 1 500 X Y np
  • 如何使用 BeautifulSoup 排除表中的某些行?

    我已经从表格中获得了所需的数据 但不想要各个玩家统计数据之间的缩写 Rk Pos Name 等 如何在保留所需数据的同时排除这些数据 包含缩写的行被归类为 thead 但我不知道如何使用该信息来跳过它 我知道玩家的数据都被压缩在一起 但现在
  • 从 FTP 服务器上的 ZIP 存档读取文件,无需下载到本地系统

    我在 FTP 服务器上的目标文件是 ZIP 文件 CSV 位于更远的两个文件夹中 我如何才能使用 BytesIO 让 pandas 读取 csv 而无需下载它 这是我到目前为止所拥有的 ftp FTP FTP SERVER ftp logi
  • 在 SQLAlchemy 中删除父级后删除子级

    我的问题如下 我有两个型号Entry and Tag通过 SQLAlchemy 中的多对多关系链接 现在我想删除所有Tag没有任何对应的Entry后Entry被删除 示例来说明我想要的内容 Entry 1带标签python java Ent
  • Pygame - 两个圆圈的碰撞检测

    我正在制作一个碰撞检测程序 其中我的光标是一个半径为 20 的圆 当它碰到另一个圆时应该将值更改为 TRUE 出于测试目的 我在屏幕中心有一个半径为 50 的固定圆 我可以测试光标圆是否击中固定圆 但它不能正常工作 因为它实际上是在测试它是
  • python中matlab find函数的替换

    我正在尝试寻找合适的python函数来替代matlabfind在我的脚本和一些谷歌搜索中我看到np where 大多数时候都能解决目的 但在双重条件的情况下 我有不同的输出 有人可以告诉我这种方法有什么问题以及如何继续吗 示例代码和差异如下
  • Python条件运算符“if else”不等于“and or”[重复]

    这个问题在这里已经有答案了 我认为下面两个函数的结果会相同 但事实并非如此 def fib2 n return n and n lt 2 or fib2 n 1 fib2 n 2 def fib3 m return m if m lt 2
  • 如何在Python中按天对时间序列数据求和? resample.sum() 没有效果

    我是Python新手 如何根据日期求和数据并绘制结果 我有一个 Series 对象 其数据如下 2017 11 03 07 30 00 NaN 2017 11 03 09 18 00 NaN 2017 11 03 10 00 00 NaN
  • 重置Keras模型的所有权重

    我希望能够重置整个 Keras 模型的权重 这样我就不必再次编译它 编译模型目前是我的代码的主要瓶颈 这是我的意思的一个例子 import tensorflow as tf model tf keras Sequential tf kera
  • Numpy 相当于 if/else 不带循环

    有没有任何Pythonic方法可以删除下面代码中的for循环和if else 此代码迭代 NumPy 数组并检查条件并根据条件更改值 gt gt gt import numpy as np gt gt gt x np random rand
  • 二进制补码扩展 python?

    我想知道是否有一种方法可以像在 Python 中的 C C 中一样使用标准库 最好在位数组上 进行二进制补码符号扩展 C C Example program include
  • 如何在 python setup.py 中 chmod 文件?

    我使用 setup py 创建了一个 python 包安装 我希望它复制文件夹 为临时创建的 did 中的数据文件 问题是我必须使用 sudo 权限调用 setup py 因为它写入 usr local 因此 当我的数据文件复制到 did
  • 如何在(最好是纯)Python 中解码 QR 码图像?

    TL DR 我需要一种使用 最好是纯 Python 从图像文件中解码 QR 码的方法 我有一个带有 QR 码的 jpg 文件 我想使用 Python 对其进行解码 我发现有几个库声称可以做到这一点 PyQRCode 网站在这里 http p
  • 检查Python multiprocessing.Connection 的实例吗?

    Connection对象是在打开时创建的multiprocessing Pipe 然而 尚不清楚如何检查一个对象是否是一个实例Connection 在Python3 3 4 3 3 3 2 中 检测Connection我可以 from mu
  • Python:正则表达式 findall

    我使用 python 正则表达式从给定字符串中提取某些值 这是我的字符串 mystring txt sometext somemore text here some other text course course1 Id Name mar
  • python chaco轴标签时间格式

    在 Enthought 的 Chaco 中 TimeFormatter类用于格式化刻度的时间字符串 标签 有没有办法指定时间格式 类似于time strftime 源代码现在将显示月份和日期时的格式硬编码为美国风格 MMDD 我想添加一些灵

随机推荐