- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两列:
date age
0 2016-01-05 47.0
1 2016-01-05 43.0
2 2016-01-05 28.0
3 2016-01-05 46.0
4 2016-01-04 39.0
我想要的是另一列日期和年龄之间的差异:
date age dob
0 2016-01-05 47.0 1969-01-05
1 2016-01-05 43.0 1973-01-05
2 2016-01-05 28.0 1988-01-05
3 2016-01-05 46.0 1970-01-05
4 2016-01-04 39.0 1977-01-04
看起来很简单,但是简单的 df['date'] - df['age'].astype('timedelta64[Y]')
给出:
0 1969-01-04 14:27:36
1 1973-01-04 13:44:24
2 1988-01-05 05:02:24
3 1970-01-04 20:16:48
4 1977-01-03 13:01:12
为什么要附加时间戳?甚至 pd.to_timedelta(df['age'], unit='Y')
也给出了相同的结果,并附加警告 unit='Y'
已弃用。
此外,df['date'] - pd.DateOffset(years=df['age'])
抛出(可以理解):
TypeError: cannot convert the series to <class 'int'>
我可以在第二个选项中使用 apply
,df['date'] - df['age'].apply(lambda a: pd.DateOffset(years=a))
,以迂回地获得正确的结果,并且(可以理解)PerformanceWarning: Adding/subtracting array of DateOffsets to DatetimeArray not vectorized
。
什么是好的(pythonic 和矢量化)解决方案?
最佳答案
如果您需要为每一行指定不同的非标准偏移量(即月或年),它可以节省时间遍历唯一偏移量而不是行。使用 groupby
完成此操作。
当唯一偏移量的数量 << DataFrame 中的行数时,尤其如此。对于整数年龄和非常长的 DataFrame 的实际值,很可能就是这种情况。
pd.concat([gp.assign(dob = gp.date - pd.offsets.DateOffset(years=age))
for age, gp in df.groupby('age', sort=False)])
date age dob
0 2016-01-05 47.0 1969-01-05
1 2016-01-05 43.0 1973-01-05
2 2016-01-05 28.0 1988-01-05
3 2016-01-05 46.0 1970-01-05
4 2016-01-04 39.0 1977-01-04
一些时间:
import perfplot
import pandas as pd
import numpy as np
def with_groupby(df):
s = pd.concat([gp.date - pd.offsets.DateOffset(years=idx)
for idx, gp in df.groupby('age', sort=False)])
return s
def with_apply(df):
s = df.apply(lambda x: x['date'] - pd.DateOffset(years=int(x['age'])), axis=1)
return s
perfplot.show(
setup=lambda n: pd.DataFrame({'date': np.random.choice(pd.date_range('1980-01-01',
freq='50D', periods=100), n),
'age': np.random.choice(range(100), n)}),
kernels=[lambda df: with_groupby(df),
lambda df: with_apply(df)],
labels=["groupby", "apply"],
n_range=[2 ** k for k in range(1, 20)],
equality_check=lambda x,y: x.sort_index().compare(y.sort_index()).empty,
xlabel='len(df)'
)
关于python - 从 to_timedelta 计算年龄很奇怪,并且 DateOffset 不可扩展到 Series,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174267/
我正在从事一个项目,该项目要求我实现一种方法来确定工作日后一天的人的年龄;也就是每年九月的第一个星期一。 这个方法在以后的年份会用到,所以需要判断当前年份和劳动节后一天的人的年龄。 下面是我用来获取学
我已经在 Play 商店中部署了一个应用程序。我需要获取下载该应用程序的人的年龄 和性别。是否可以获取这些属性,或者我是否需要实现 Google Analytics 才能获取这些属性? 最佳答案 恐怕
我正在尝试根据出生日期计算年龄,我使用 this thread 成功地做到了这一点.但是,我的一些 DateOfBirth 具有空值,并且使用我下面的公式,结果返回为“2012”而不是(空白/空)。
我正在尝试根据财政年度结束时获取年龄。如果我的出生日期是 1962 年 1 月 16 日,那么我当前的年龄是 50 岁(假设今天的日期是 2012 年 1 月 16 日)。我可以使用什么 JavaSc
创建具有以下规范的函数: 函数名称:employee_matcher 目的:将员工姓名与提供的公司、年龄和性别相匹配 参数:公司(字符串)、年龄(整数)、性别(字符串) 返回:员工的名字和姓氏,如下所
1、根据身份证号码计算出生日期、年龄、性别(18位) 复制代码 代码如下: //获取输入身份证号码 var UUserCard = $("#UUserCard").val
适用于OA项目中这些对档案的管理 1、根据身份证号码计算出生日期、年龄、性别(18位) 复制代码代码如下: //获取输入身份证号码 var UUserCa
我将导入表中的数据INSERT INTO插入到我创建的新表中,该表包含有关人员、姓名、地址、出生日期、年龄、性别等的一般信息。 当我插入新表时,导入数据没有年龄,因此我在INSERT INTO之后执行
我如何使用 go standard 构建它? sql包让其他人可以阅读吗?我需要添加很多字段。 result, err := db.Exec( "INSERT INTO MyTable (na
是否有任何简单的 Android/Java 库/框架可以检测图片上的人脸并给我一些关于图片上的人的信息?我的意思是诸如性别、年龄、情绪(微笑、悲伤、愤怒)之类的信息...... 我试过Face++和微
我正在为我的 Android 应用程序使用 Firebase 身份验证。用户可以通过多个提供商(Google、Facebook、Twitter)登录。 成功登录后,有没有办法使用 Firebase a
我想知道是否可以用 PHP 以某种方式检查 session 时限。我浏览了 stackoverflow,但没有找到任何东西。提前感谢您的所有回答。 如果有人想知道为什么我需要知道这样的事情,我想在所有
我正在尝试使用 CakePHP 按出生日期分组并根据结果进行计数。这是我的查询。 $data = $this->User->find('all', array( 'fields' => arr
我正在尝试找出一种使用 Python 3.6 和 Boto 3 通过 aws lambda 函数让用户访问 key 年龄的方法。我的问题是我似乎无法找到正确的 api 调用(如果存在的话)以此目的。我
使用 Seaside 应用程序启动我的图像时,我在启动方法中有此代码: WAMySeasideApp>>startUp: resuming WAMySeasideApp waAppli
谷歌从哪里获得这些数据,是否有可能在没有它的情况下在我自己的网站上手动获得这些数据(假设它以某种Cookie /用户代理字符串/标识符/等形式存在)? 最佳答案 Google从第3方双击Cookie获
我在 Google App Engine 上部署了一个 Django 应用程序,该应用程序过早地将其用户注销。但是没有关闭浏览器窗口/选项卡。在 settings.py 中,我有以下代码: SESSI
我正在通过 Python 使用 YouTube API。我已经可以收集特定视频的所有评论,包括作者姓名、日期和评论内容。 我还可以使用单独的代码提取特定作者的个人信息(年龄、性别、兴趣……)。但我不能
print("how old are you") age = input(">") if age >= 24: print("you are getting old") print (age) els
我是一名优秀的程序员,十分优秀!