- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理多个文件中的大数据。这是一个更大问题的一部分,但为了简单起见,我将其分解为多个部分。
文件 1 存储在 df1 中,文件 2 存储在 df2 中。我有大约 12 个文件,每个文件有 300 万条记录。
df1 和 df2 都是相关的,但存储为单独的文件。
df1 = pd.DataFrame({'person_id': [1, 2, 3, 4, 5],
'date_birth': ['12/30/1961', '05/29/1967', '02/03/1957', '7/27/1959', '01/13/1971'],
'date_death': ['07/23/2017','05/29/2017','02/03/2015',np.nan,np.nan]})
df1['date_birth'] = pd.to_datetime(df1['date_birth'])
df1['date_death'] = pd.to_datetime(df1['date_death'])
df1['diff_birth_death'] = df1['date_death'] - df1['date_birth']
df1['diff_birth_death']=df1['diff_birth_death']/np.timedelta64(1,'D')
df2 = pd.DataFrame({'person_id': [1,1,1,2,3],
'visit_id':['A1','A2','A3','B1','B2'],
'diag_start': ['01/01/2012', '02/25/2017', '02/03/2015', '07/27/2016', '01/13/2011'],
'diag_end': ['05/03/2012','05/29/2017','03/03/2015','08/15/2016','02/13/2011']})
df2['diag_start'] = pd.to_datetime(df2['diag_start'])
df2['diag_end'] = pd.to_datetime(df2['diag_end'])
df2['diff_birth_diag_start'] = df2['diag_start'] - df1['date_birth']
df2['diff_birth_diag_end'] = df2['diag_end'] - df1['date_birth']
df2['diff_birth_diag_start']=df2['diff_birth_diag_start']/np.timedelta64(1,'D')
df2['diff_birth_diag_end']=df2['diff_birth_diag_end']/np.timedelta64(1,'D')
date
和
month
值但保留
year
组件和
time difference between events
(出生和死亡之间,出生和diag_start之间,出生和diag_end之间)
person_id 1 = -10 days (incorrect value. you will see below as to why it's incorrect)
person_id 2 = 10 days
person_id 3 = 100 days
person_id 4 = 20 days
person_id 5 = 125 days
year
值改变了。
最佳答案
正如评论中所述,您想要的是随机化两个 datetime
对象受到一些限制:
import datetime as dt
from random import random
def rand_date_diff_keep_year_and_interval(dt1, dt2):
if dt1 > dt2:
raise Exception("dt1 must be lesser than dt2")
range1 = {
"min": dt1.replace(month=1, day=1) - dt1,
"max": dt1.replace(month=12, day=31) - dt1,
}
range2 = {
"min": dt2.replace(month=1, day=1) - dt2,
"max": dt2.replace(month=12, day=31) - dt2,
}
intersection = {
"min": max(range1["min"], range2["min"]),
"max": min(range1["max"], range2["max"]),
}
rand_change = random()*(intersection["max"] - intersection["min"]) + intersection["min"]
return (dt1 + rand_change, dt2 + rand_change)
print(rand_date_diff_keep_year_and_interval(dt.datetime(2000, 1, 1), dt.datetime(2000, 12, 31)))
print(rand_date_diff_keep_year_and_interval(dt.datetime(2000, 5, 18), dt.datetime(2001, 8, 20)))
numpy.random
生成一系列随机数,而不是只创建一个随机数并为所有行重复它......这会少得多随机。
import datetime as dt
import pandas as pd
import numpy.random as rnd
def series_rand_date_diff_keep_year_and_interval(sdt1, sdt2):
if any(sdt1 > sdt2):
raise Exception("dt1 must be lesser than dt2")
range1 = {
"min": sdt1.apply(lambda dt1: dt1.replace(month=1, day=1) - dt1),
"max": sdt1.apply(lambda dt1: dt1.replace(month=12, day=31) - dt1),
}
range2 = {
"min": sdt2.apply(lambda dt2: dt2.replace(month=1, day=1) - dt2),
"max": sdt2.apply(lambda dt2: dt2.replace(month=12, day=31) - dt2),
}
intersection = {
"min": pd.concat([range1["min"], range2["min"]], axis=1).max(axis=1),
"max": pd.concat([range1["max"], range2["max"]], axis=1).min(axis=1),
}
rand_change = pd.Series(rnd.uniform(size=len(sdt1)))*(intersection["max"] - intersection["min"]) + intersection["min"]
return (sdt1 + rand_change, sdt2 + rand_change)
df = pd.DataFrame([
{"start": dt.datetime(2000, 1, 1), "end": dt.datetime(2000, 12, 31)},
{"start": dt.datetime(2000, 5, 18), "end": dt.datetime(2001, 8, 20)},
])
df2 = pd.DataFrame(df)
df2["start"], df2["end"] = series_rand_date_diff_keep_year_and_interval(df["start"], df["end"])
print(df2.head())
import datetime as dt
import pandas as pd
import numpy.random as rnd
import numpy as np
from functools import reduce
def manyseries_rand_date_diff_keep_year_and_interval(*sdts):
ranges = list(map(
lambda sdt:
{
"min": sdt.apply(lambda dt: dt.replace(month=1, day=1 ) - dt),
"max": sdt.apply(lambda dt: dt.replace(month=12, day=31) - dt),
},
sdts
))
intersection = reduce(
lambda range1, range2:
{
"min": pd.concat([range1["min"], range2["min"]], axis=1).max(axis=1),
"max": pd.concat([range1["max"], range2["max"]], axis=1).min(axis=1),
},
ranges
)
rand_change = pd.Series(rnd.uniform(size=len(intersection["max"])))*(intersection["max"] - intersection["min"]) + intersection["min"]
return list(map(lambda sdt: sdt + rand_change, sdts))
def setup_diffs(df1, df2):
df1['diff_birth_death'] = df1['date_death'] - df1['date_birth']
df1['diff_birth_death'] = df1['diff_birth_death']/np.timedelta64(1,'D')
df2['diff_birth_diag_start'] = df2['diag_start'] - df1['date_birth']
df2['diff_birth_diag_end'] = df2['diag_end'] - df1['date_birth']
df2['diff_birth_diag_start'] = df2['diff_birth_diag_start']/np.timedelta64(1,'D')
df2['diff_birth_diag_end'] = df2['diff_birth_diag_end']/np.timedelta64(1,'D')
df1 = pd.DataFrame({'person_id': [1, 2, 3, 4, 5],
'date_birth': ['12/30/1961', '05/29/1967', '02/03/1957', '7/27/1959', '01/13/1971'],
'date_death': ['07/23/2017', '05/29/2017', '02/03/2015', np.nan, np.nan]})
df1['date_birth'] = pd.to_datetime(df1['date_birth'])
df1['date_death'] = pd.to_datetime(df1['date_death'])
df2 = pd.DataFrame({'person_id': [1,1,1,2,3],
'visit_id':['A1','A2','A3','B1','B2'],
'diag_start': ['01/01/2012', '02/25/2017', '02/03/2015', '07/27/2016', '01/13/2011'],
'diag_end': ['05/03/2012','05/29/2017','03/03/2015','08/15/2016','02/13/2011']})
df2['diag_start'] = pd.to_datetime(df2['diag_start'])
df2['diag_end'] = pd.to_datetime(df2['diag_end'])
setup_diffs(df1, df2)
display(df1)
display(df2)
series_list = manyseries_rand_date_diff_keep_year_and_interval(
df1['date_birth'], df1['date_death'], df2['diag_start'], df2['diag_end'])
df1['date_birth'], df1['date_death'], df2['diag_start'], df2['diag_end'] = series_list
setup_diffs(df1, df2)
display(df1)
display(df2)
关于python - 随机化日期和月份,但保留年份和时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62429091/
我正在用 javascript 制作日历,我不想在 中显示当前日期、日期名称和月份名称它在我的函数内 Kalender()但由于某种原因,如果我执行函数 volgende() (下个月)它更改 中
有一个输入标签应用了数据掩码。 这允许输入数据,例如 02/12/2014 或 13/05/2014。但不接受 1/1/2013 或 13/5/2014。请帮忙!!! 最佳答案 根据jQuery
我正在尝试创建一个函数,它将接受三个输入变量(开始日期、结束日期、粒度),并将输出一个包含所有日期的数组。输出将根据输入以每日或每月为粒度。例如,如果我查看 2015 年 1 月 - 2015 年 2
我有这段代码可以从数据库中获取一个字段: $end_date=$row1['end_date']; 如果我打印它,它会给我这样的信息:25-09-2012我需要的是获取月份值、年份和日期。类似于: $
我有一个事件表,其中 X 为频率(每 X 个月一次),第一个开始日期和结束日期如下: 如何复制每一行并将其粘贴到新工作表中,并根据 X 和月份日期的增量为每一行添加附加行,如下所示: 最佳答案 这里是
我将以下格式的日期存储在Mailed_Date列中 Mon, 09/20/10 01:04 PM 我使用了一个serde(csv-serde-1.1.2-0.11.0-all.jar)从csv文件中获
我想根据日期和月份值对数组进行排序。我正在使用此代码 NSSortDescriptor *descriptor=[[NSSortDescriptor alloc]initWithKey:@"self
我需要当前年份,月份和日期为3个不同的变量。下面的代码给出了日期时间 val now = Calendar.getInstance().getTime() 2016年9月29日星期四18:27:38
我无法获得正确的查询结果 我正在查询获取在相应月份注册了多少用户。到目前为止,我提出了以下查询,它允许我获得该结果,但没有显示没有用户注册的月份 SELECT YEAR(c.created_at) a
在 Programming in the Key of C# 中,作者给出了一个示例(附源代码),说明如何将日期(年、月、日 -- 数字)打包为 32 位整数。在示例中,作者将信息打包如下: int
在表中,我有一列名为“service_time”的列,它是服务的开始日期,另一列“times_year”是每年应完成服务的次数。 我遇到的问题是如何在 -> (thisMonth == service
使用:Python 3.6, Pandas 0.22 我有一个 .csv 文件,我需要从中获取基于月份和位置的平均值。这是数据中的一行,还有更多具有多个位置和日期的行: 名称日期雪 大急流城杰拉尔德福
我想循环遍历给定开始时间以来的月份,并打印第一天和最后一天。我可以手动跟踪它是哪个月份和年份,并使用 calendar.monthrange(year, Month) 来获取天数......但这是最好
我正在做试卷的最后一题,但我已经迷失在算法的创建过程中。我的定义图看起来不错,但我就是无法确定计算月份方面的顺序。 题目如下: A file of transaction records includ
我正在获取系统当前日期并尝试在 TextView 中显示它。 尝试下面的代码后 private OnClickListener listener1 = new OnClickListener() {
我正在使用以下格式来格式化 DateTime: DateTime CusDate = dateTimePicker1.Value; string Date = CusDate.ToString("dd
废话不多少,上代码 复制代码 代码如下: // 获取指定日期所在星期的开始时间与结束时间 function getWeekRange($date){ &nb
今天我运行了自动化测试,并想知道为什么我收到了有关某些特定日期内容的错误。 事实证明,设置固定的 UTC 月份不再有效。但昨天确实如此。据我所知,没有任何变化。 我尝试运行以下代码 var d = n
我有一个包含两个日期字段的 Grails 域 Date updated Date created 我想根据月、小时或年的更新时间来计算行数。我怎样才能做到这一点。互联网上显示的方法不起作用。我正在使用
是否有任何内置函数可用于数据框对象以生成类 Date 时间序列上的变量以创建星期几、月份、年份、年份中的星期,等在 R 中? 基础包中的weekdays、months、quarters函数生成文本输出
我是一名优秀的程序员,十分优秀!