我想在我的数据集中创建一个新列,这是今天与数据集中已有的另一列之间的年份差异,填充了日期。
上面的代码:
df['diff_years'] = datetime.today() - df['some_date']
df['diff_years']
Run Code Online (Sandbox Code Playgroud)
给我以下输出(示例):
1754 days 11:44:28.971615
Run Code Online (Sandbox Code Playgroud)
我必须得到类似的东西(意味着上面的输出以年为单位):
4,8
(or 5)
Run Code Online (Sandbox Code Playgroud)
我感谢任何帮助!
PS。:我想避免循环系列,我相信路径会给我一个想要的解决方案,但由于有一个大系列,我想避免这种方式。
我有一个数据帧:
ID DATE WIN
A 2015/6/5 Yes
A 2015/6/7 Yes
A 2015/6/7 Yes
A 2015/6/7 Yes
B 2015/6/8 No
B 2015/8/7 Yes
C 2015/5/15 Yes
C 2015/5/30 No
C 2015/7/30 No
C 2015/8/03 Yes
Run Code Online (Sandbox Code Playgroud)
我想添加一个列,计算ID过去1个月内每个胜利的数量,结果如下:
ID DATE WIN NumOfDaysSinceLastWin NumOfWinsInThePast30days
A 2015/6/5 Yes 0 0
A 2015/6/7 Yes 2 1
A 2015/6/7 Yes 2 1 or (A 2015/6/7 Yes 0 2)
A 2015/6/8 No 1 3
B 2015/8/7 No 0 0
B 2015/8/7 Yes 0 0
C 2015/5/15 …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以根据今天的日期和生日计算某人的年龄,然后以以下方式显示:
If a user is less than (<) 1 year old THEN show their age in MM & days.
Example: 10 months & 2 days old
If a user is more than 1 year old AND less than 6 years old THEN show their age in YY & MM & days.
Example: 5 years & 3 months & 10 days old
If a user is more than 6 years old THEN display their age in YY.
Example: 12 years
Run Code Online (Sandbox Code Playgroud) 我正在尝试将电子邮件(日期对象)的接收日期与 JSONObject 中的日期(字符串)进行比较。这两个日期将属于不同时区,相差 1 小时。
我的情况是,我必须在几秒钟内获得它们之间的确切差异,如果差异为 +/- 10 秒,我就会找到匹配项。为此,我决定将两者都转换为“UTC”,然后进行区别。这是我的代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String MsgDtStr = sdf.format(messagesToBeProcessed.getReceivedDate());
Date MsgDt = sdf.parse(MsgDtStr);
Date ObjDt = sdf.parse((JsonObj.get("date").toString()));
int DiffInSecs = (int) (ObjDt.getTime() - MsgDt.getTime()) / 1000 % 60;
if (DiffInSecs >= -10 && DiffInSecs <= 10) {
System.out.println("Found a match!");
MatchedList.add(i);
}
Run Code Online (Sandbox Code Playgroud)
这似乎给了我正确的结果。应该与 json 对象匹配的邮件匹配。即差异为 +/- 10 秒。但是,当我尝试打印日期并DiffInSecs在上述逻辑之后,我得到如下值:
date in object: 2017-06-22 19:47:25
date in message: 2017-06-22 23:47:30
DiffInSecs: -5
........
date in object: 2017-06-22 17:50:38
date …Run Code Online (Sandbox Code Playgroud) 计算使用Joda-Time 之间的天数1900-01-01和日期之间的天数1918-03-24似乎给出了一个一个接一个的结果.
使用Java 8可以java.time得到正确的结果.Joda-Time不计算的原因是什么1918-03-25?
使用Joda-time v2.9.9.
public static void main(String[] args) {
jodaDiff("1918-03-24");
javaDiff("1918-03-24");
jodaDiff("1918-03-25");
javaDiff("1918-03-25");
jodaDiff("1918-03-26");
javaDiff("1918-03-26");
jodaDiff("2017-10-10");
javaDiff("2017-10-10");
}
private static void jodaDiff(String date) {
DateTime start = new DateTime(1900, 1, 1, 0, 0, 0, DateTimeZone.forID("UTC"));
DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("YYYY-MM-dd");
DateTime end = dateDecoder.parseDateTime(date);
int diff = Days.daysBetween(start, end).getDays();
System.out.println("Joda " + date + " " + diff);
}
private static void javaDiff(String date) {
LocalDate start = LocalDate.parse("1900-01-01");
LocalDate …Run Code Online (Sandbox Code Playgroud) 我的表结构是这样的
id date Time userid
17 2017-01-22 05:08:09.0000000 836232017
16 2017-01-22 05:08:05.0000000 836232017
11 2017-01-22 05:06:40.0000000 836232017
10 2017-01-22 05:06:38.0000000 836232017
7 2017-01-22 05:06:31.0000000 836232017
Run Code Online (Sandbox Code Playgroud)
我需要获取相应用户 ID 和日期的第一个值和最后一个值之间的时间差。例如:用户 ID 836232017 的 datediff 介于 '05:08:09.0000000' 和 '05:06:31.0000000' 之间。请为此提供解决方案。
我必须做日期之间的差异并返回天数。日期格式如下:
12/9/2011 12:00:00 上午
有谁知道如何在不使用 lubridate 的情况下进行差异化处理?
如何在JDK7中找到两个日期之间的差异,以便可以添加差异以使两个日期相等?
我尝试使用类似StackOverflow问题的解决方案,从另一个中减去一个日期的毫秒数,但这可能导致日期之间的差异不正确.
在这个例子中,我尝试通过设置使其a相等ba = (b-a) + a
private void makeTwoDatesEqual(GregorianCalendar a, GregorianCalendar b, DatatypeFactory datatypeFactory) {
long b_minus_a = b.getTimeInMillis() - a.getTimeInMillis();
Duration delta = datatypeFactory.newDuration(b_minus_a);
delta.addTo(a);
}
Run Code Online (Sandbox Code Playgroud)
但结果出人意料:
之前
a = "2015-08-29T00:00:00.000Z"
b = "2040-01-01T00:00:00.000Z"
delta = "P24Y4M5DT0H0M0.000S" // 2 days longer than it should be.
Run Code Online (Sandbox Code Playgroud)
后
a = "2040-01-03T00:00:00.000Z"
b = "2040-01-01T00:00:00.000Z"
delta = "P24Y4M5DT0H0M0.000S"
a.equals(b) = false
Run Code Online (Sandbox Code Playgroud)
Joda-Time也有同样的问题:
private void makeTwoDatesEqual(GregorianCalendar a, GregorianCalendar b) {
DateTime date1 = new DateTime(a); …Run Code Online (Sandbox Code Playgroud) Momentjs 具有calendar()漂亮的打印时间跨度的功能,如下所示。
例如:
“上周一下午 1:14”
“09/21/2017”(如果日期是前一段时间)
Java中是否有等效的功能(如果可能,Joda-Time)?
moment().subtract(10, 'days').calendar(); // 09/21/2017
moment().subtract(6, 'days').calendar(); // Last Monday at 1:14 PM
moment().subtract(3, 'days').calendar(); // Last Thursday at 1:14 PM
moment().subtract(1, 'days').calendar(); // Yesterday at 1:14 PM
moment().calendar(); // Today at 1:14 PM
moment().add(1, 'days').calendar(); // Tomorrow at 1:14 PM
moment().add(3, 'days').calendar(); // Wednesday at 1:14 PM
moment().add(10, 'days').calendar(); // 10/11/2017
Run Code Online (Sandbox Code Playgroud) 我是 SQL Server 的新手,我对 lag() 函数有一些疑问。我必须计算两个用户活动之间的平均距离(以天为单位)。然后,我必须对所有用户进行 GROUP BY,计算每个用户行之间的所有日期差异,最后选择该组的平均值。
为了清楚起见,我有这样的表格:

首先,我必须过滤活动天数(活动!=0)。然后我必须创建这个:

最后,预期的结果是这样的:

我认为这可能是一种“某种”代码:
select userid, avg(diff)
(SELECT *,DATEDIFF(day, Lag(dateid, 1) OVER(ORDER BY [Userid]),
dateid) as diff
FROM table1
where activities!=0
group by userid) t
group by userid
Run Code Online (Sandbox Code Playgroud)
当然是行不通的。我想我还必须做一个 while 循环,因为每个用户的 rownumber 都会发生变化。
我希望你能帮助我!非常感谢您