groupby后Series转list、序列类变量、 notnull()、pd.cut、groupby字段value_counts双重索引、idxmax()最大值所在索引、两个dataframe比较需要索引顺序一致

作者定义了一个序列变量,贷款事件定义为0,点击事件定义为1,合并同一天的事件,比如同一天两次贷款还是一个0,贷款事件和点击事件按时间先后就形成一个序列,这种序列可能存在某种pattern,再把形成的序列astype成category类型,再通过cat.categories进行编码。这里还有一个新遇到的地方,df.groupby('uid')['behavior'].apply(lambda x : list(x)),这种把一个series转成一个list,这是时候这个behavior字段每一个元素就是list,然后df['behavior'].apply(lambda x: ''.join(map(str,x))),用map应用的list x的每一个元素,然后直接连接起来,用的''。

获得一个字段非空的mask,tmp[tmp.cut_1m.notnull()],notnull()\isnull()

之前接触了qcut,按照分位数来划分,还有一个cut,其实吧,这个函数,有点儿像我评分卡里面的regroup函数,比如函数调用时候是pd.cut(tmp.click_time,valid_cut_point,labels=labels,right=False,include_lowest=True)
tmp.click_time是分段的字段,valid_cut_point是分段的点,比如ABC三个点,就分成两段(A,B] (B,C] 默认是左开右闭,right参数可以控制,include_lowest是控制左边,这个参数为什么不叫left呢?

tmp.groupby('uid').plannum.value_counts()会形成一个二重索引的Series,lv0的索引是uid,lv1的索引是plannum

idxmax()会得到一个Series,值最大所在的索引,比如df.groupby('uid')['freq_plannum'].idxmax(),这个索引后面就可以进行筛选,得到对应的最大值所在行的情况

等等,idxmax()和transform取最大行的方法差异在哪?transform比如df.groupby('uid')['loan_time'].transform(max) == df['loan_time']这个是筛选的mask;如果用idxmax(),df.groupby('uid')['loan_time'].idxmax()这就得到了最大索引的集合,这个也可以进行筛选啊,有差吗?试一下!对的,结果是一样的,可是idxmax()方法效率更低,且内部要进行排序

两个dataframe进行比较的时候,行索引和列索引的顺序都必须是一样的,才能比较,会对其中的每一个元素进行比较





留言

熱門文章