【问题标题】:Pandas Split-Apply-CombinePandas 拆分应用组合
【发布时间】:2014-09-10 19:01:38
【问题描述】:

我有一个包含用户 ID、推文和 CreatedDates 的数据集。每个用户 ID 将在不同日期创建多条推文。我想找到推文的频率,我写了一个小计算,给出了每个用户 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) 并将这些值添加到正确的用户 ID 旁边。我怎么可能做到这一点?我想说

twitterDataFrame['frequency'] = the frequency corresponding to the UserID. e.g twitterDataFrame['UserID'] and the frequency value we got for that above. 

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

【问题讨论】:

    标签: python numpy pandas machine-learning scipy


    【解决方案1】:

    您可以在您创建的frequency 对象上使用join 操作,或者在一个阶段执行:

    get_freq = lambda ts: (ts.last() - ts.first()).astype('timedelta64[h]') / len(ts)
    twitterDataFrame['frequency'] = twitterDataFrame.groupby('UserID')['CreatedAtForCalculations'].transform(get_freq)
    

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2015-09-03
      相关资源
      最近更新 更多