(新手对Python和熊猫)
我有一个1500万到2000万行的数据集,每一行都是一个“用户”出现的时间索引观察,我需要分析每个用户的每天访问模式,并将其标准化为第一次访问。所以,我希望用X轴表示“首次访问后的天数”和Y轴表示“该用户在这一天的访问量”,也就是说,我需要得到一个按时间增量索引的序列,以及以该delta结束的时间段内的访问值[0:1,3:5,4:2,6:8],但是我很早就被卡住了。。。在
我从以下几点开始:
rng = pd.to_datetime(['2000-01-01 08:00', '2000-01-02 08:00',
'2000-01-01 08:15', '2000-01-02 18:00',
'2000-01-02 17:00', '2000-03-01 08:00',
'2000-03-01 08:20','2000-01-02 18:00'])
uid=Series(['u1','u2','u1','u2','u1','u2','u2','u3'])
misc=Series(['','x1','A123','1.23','','','','u3'])
df = DataFrame({'uid':uid,'misc':misc,'ts':rng})
df=df.set_index(df.ts)
grouped = df.groupby('uid')
firstseen = grouped.first()
ts
值对每个uid
是唯一的,但是可以重复(可以同时看到两个uid
,但是任何一个{
第一步是(我认为)向DataFrame添加一个新列,为每个观察显示该用户的第一个观察值的timedelta值。但是,我被困在数据帧中了。我尝试的最简单的方法给了我一个对新手来说很模糊的错误消息:
^{pr2}$所以我尝试了一种暴力方法:
def f(row):
return row.ts - firstseen.ts[row.uid]
df['sinceseen'] = Series([{idx:f(row)} for idx, row in df.iterrows()], dtype=timedelta)
在这个尝试中,df
得到了一个sinceseen
,但它都是NaN
,并为type(df.sinceseen[0])
显示了一个float
类型——不过,如果我只是打印这个系列(在iPython中),它会生成一个很好的timedeltas
列表。在
我在反复研究“Python for Data Analysis”,似乎apply()
应该可以工作,但是
def fg(ugroup):
ugroup['sinceseen'] = ugroup.index - ugroup.index.min()
return ugroup
df = df.groupby('uid').apply(fg)
在“ugroup.index - ugroup.index.min(
”上给我一个TypeError
,即使两个操作数中的每一个都是Timestamp
。在
所以,我在发火-有人能给我指出“熊猫”的方法来获取数据结构Ineed吗?在
这有助于你开始吗?在
相关问题 更多 >
编程相关推荐