Pandas Split-Apply-Combine

时间:2014-07-19 21:54:54

标签: python numpy pandas machine-learning scipy

我有一个包含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. 

但是我不知道我是怎么做到的。有谁知道我怎么能做到这一点?

1 个答案:

答案 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)