我有一个熊猫数据帧,一列中有散列,另一列中有日期。我想创建一个带有age的新列,即带有特定散列的第一个日期和当前日期之间的差值。例如,dataframeinf
包含
inf.head(5)
id date
0 00047331-29e7-4165-833f-3efcfc2ea90f 2015-08-19
1 0005b350-31ac-443c-8244-21a34120c83d 2015-08-20
2 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-10
3 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-07
4 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-04
我添加了一个名为age的列
inf['age'] = pd.Series(np.zeros(len(inf)), index=inf.index)
现在我想把这个转换成
id date age
0 00047331-29e7-4165-833f-3efcfc2ea90f 2015-08-19 0
1 0005b350-31ac-443c-8244-21a34120c83d 2015-08-20 0
2 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-10 0
3 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-07 -3
4 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-04 -6
其中,最后一列是特定id的第一个日期与该行中的日期之间的差。我目前正在使用它来执行以下操作:
datedict={}
for count in range(len(inf)):
try:
inf['age'][count]=inf['date'][count]-datedict[inf['id'][count]]
except KeyError:
datedict[inf['udid'][count]]=inf['date'][count]
这是工作,但令人厌恶的缓慢。花了一个多小时录了10万张唱片。有没有更好的方法?你知道吗
与Anton's类似,味道略有不同:
可以对哈希使用
groupby
方法,然后对date
列和iloc
使用transform
方法来获取第一个元素。您还需要使用pd.to_datetime
将日期列转换为日期时间:我不知道为什么它从1970年1月1日开始印刷,但你可以通过从中减去
pd.Timestamp('1970-01-01')
来解决这个问题如果只需要值,可以使用
dt.days
,然后将其传递到新列age
:相关问题 更多 >
编程相关推荐