在我将它们分组后,我的数据框看起来像这样。
gb = new_user_log.groupby(['msno', 'date', 'num_25', 'num_50',
'num_75', 'num_985', 'num_100',
'num_unq', 'total_secs', 'days']).days.count()
部分数据框显示在此处:
msno date num_25 num_50 num_75 num_985 num_100 num_unq total_secs days
++orpnUqSevh2M5A97pRRiONA58g5m9DwaNrhD44HY0= 2016-08-14 78 13 3 3 77 84 18987.862 2 1
+0krxpTkQT7hciN95OEp7i2lyKvbXft887VNQGF6xN4= 2016-12-22 27 23 5 2 11 65 5946.577 35 1
98 1
+1eAmfPiXsMG0J+U/j7YTeXO+u0/ZhZqmoXfXKOY57I= 2016-12-17 8 2 2 2 126 131 32629.128 46 1
+1zyLKrstPYDOnoyooqqb0+VmmovONd9N3QZynT7rq0= 2016-07-14 18 2 1 3 46 66 10253.571 196 1
2016-09-17 11 3 1 6 81 45 12970.416 261 1
2016-11-17 5 1 3 2 8 19 2614.571 322 1
+28j7X4BShC9g2C4No4xAmzXuhLlmMbFDYWZcbblCEs= 2015-11-21 1 2 1 2 88 94 23580.548 45 1
2016-03-28 12 6 5 4 36 61 11596.887 173 1
+2GtgQNpMuIG0Vy1ycAbfla0zRni6NKtRLlyyuHHB8I= 2015-07-18 15 1 2 2 73 75 19179.451 102 1
2016-07-29 7 2 1 1 8 17 2515.486 479 1
2016-11-09 45 6 3 1 71 93 19865.317 582 1
所以我希望解决的第一个小问题是给每个'msno'(userID)一个数字,而不是字符串类型......
所有这些功能num_25 num_50 num_75 num_985 num_100 num_unq
total_secs
都计算每天发生的事件。
最后一项功能days
由days = date - transaction_date
计算,表示用户拥有该产品的天数。每个用户的第一个transaction_date
表示第一次购买此产品。它来自下面的数据框,
msno payment_method_id \
0 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 39
20 GBy8qSz16X5iYWD+3CMxv/Hm6OPSrXBYtmbnlRtknW0= 33
44 T0FF6lumjKcqEO0O+tUH2ytc+Kb9EkeaLzcVUiTr1aE= 40
72 9iW/UpqRoviya9CQh64RoYLPjiws8+biwscN+g5qYm4= 37
86 LUCi7i5FeNuZz4DB0zKu8J80rgr2uCO8YHCSW9PZfAk= 38
98 qCagaTL3UbMn0zvdMDDUoonbei70q1eASKrXa1cZGCs= 38
120 nsx5IGkCueevv0vFHB4jkG0HdRl6m6ltB8U9Guo5nS0= 40
123 nsx5IGkCueevv0vFHB4jkG0HdRl6m6ltB8U9Guo5nS0= 40
transaction_date membership_expire_date
0 2016-10-31 2016-12-21
20 2016-03-31 2016-04-30
44 2015-03-28 2015-04-27
72 2015-05-04 2015-06-03
86 2016-03-13 2016-08-24
98 2015-03-20 2015-04-19
120 2016-04-07 2016-05-06
123 2017-01-01 2017-02-06
您可以在days
中看到每个用户只有几个值。那么是否可以用0填充事件的所有其他日子以将数据帧扩展为非常稀疏的数据帧?我必须遵循的规则是在days
列中找到最大值(在此示例中为582
),然后在没有事件发生的情况下为这些事件列下的每个用户填充所有582天的0。 / p>
从标题我说填充NaN,因为一些用户有多个transcation_date
和membership_expire_date
记录(参见最后两行)。例如,我想计算用户之间的第二个transcation_date
- 第一个membership_expire_date
(类似于days
的方式)之间的差异,然后在此范围时间内填写NaN the third starts - the second ends
(对于某些用户来说,即使是大约30个,也可能有很多范围时间)。因此应该填充两种类型的值,0和NaN。
我不知道我是否清楚地提出了这些问题,确实很多......如果有人能帮助我,甚至给我一些提示,你一定是我的救星!