我有一个包含userIDs,Tweets和CreatedDates的数据集。每个UserID将在不同日期创建多条推文。我想找到推文的频率,我写了一个小计算,它给出了每个用户ID每小时推文的数量。我使用group by来执行以下代码:
twitterDataFrame = twitterDataFrame.set_index(['CreatedAt'])
tweetsByEachUser = twitterDataFrame.groupby('UserID')
numberOfHoursBetweenFirstAndLastTweet = (tweetsByEachUser['CreatedAtForCalculations'].first() - tweetsByEachUser['CreatedAtForCalculations'].last()).astype('timedelta64[h]')
numberOfTweetsByTheUser = tweetsByEachUser.size()
frequency = numberOfTweetsByTheUser / numberOfHoursBetweenFirstAndLastTweet
打印频率值时,我得到:
UserID
807095 5.629630
28785486 2.250000
134758540 8.333333
现在我需要回到我的大数据框(twitterDataFrame)并将这些值与正确的UserID一起添加。我怎么可能这样做?我想说
twitterDataFrame['frequency'] = the frequency corresponding to the UserID. e.g twitterDataFrame['UserID'] and the frequency value we got for that above.
但是我不知道我是怎么做到的。有谁知道我怎么能做到这一点?
答案 0 :(得分:2)
您可以对您创建的join
对象使用frequency
操作,也可以在一个阶段执行此操作:
get_freq = lambda ts: (ts.last() - ts.first()).astype('timedelta64[h]') / len(ts)
twitterDataFrame['frequency'] = twitterDataFrame.groupby('UserID')['CreatedAtForCalculations'].transform(get_freq)