• <bdo id='6GGiT'></bdo><ul id='6GGiT'></ul>

    <legend id='6GGiT'><style id='6GGiT'><dir id='6GGiT'><q id='6GGiT'></q></dir></style></legend>
  • <small id='6GGiT'></small><noframes id='6GGiT'>

    <i id='6GGiT'><tr id='6GGiT'><dt id='6GGiT'><q id='6GGiT'><span id='6GGiT'><b id='6GGiT'><form id='6GGiT'><ins id='6GGiT'></ins><ul id='6GGiT'></ul><sub id='6GGiT'></sub></form><legend id='6GGiT'></legend><bdo id='6GGiT'><pre id='6GGiT'><center id='6GGiT'></center></pre></bdo></b><th id='6GGiT'></th></span></q></dt></tr></i><div id='6GGiT'><tfoot id='6GGiT'></tfoot><dl id='6GGiT'><fieldset id='6GGiT'></fieldset></dl></div>

        <tfoot id='6GGiT'></tfoot>

        通过在不与其他值冲突的情况下追加值来生成序列

        时间:2024-08-22
        • <i id='WLR2q'><tr id='WLR2q'><dt id='WLR2q'><q id='WLR2q'><span id='WLR2q'><b id='WLR2q'><form id='WLR2q'><ins id='WLR2q'></ins><ul id='WLR2q'></ul><sub id='WLR2q'></sub></form><legend id='WLR2q'></legend><bdo id='WLR2q'><pre id='WLR2q'><center id='WLR2q'></center></pre></bdo></b><th id='WLR2q'></th></span></q></dt></tr></i><div id='WLR2q'><tfoot id='WLR2q'></tfoot><dl id='WLR2q'><fieldset id='WLR2q'></fieldset></dl></div>

          <small id='WLR2q'></small><noframes id='WLR2q'>

            <bdo id='WLR2q'></bdo><ul id='WLR2q'></ul>
              <tfoot id='WLR2q'></tfoot>
                <tbody id='WLR2q'></tbody>

              <legend id='WLR2q'><style id='WLR2q'><dir id='WLR2q'><q id='WLR2q'></q></dir></style></legend>
                  本文介绍了通过在不与其他值冲突的情况下追加值来生成序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有如下所示的数据帧

                  df = pd.DataFrame({'person_id': [101,101,101,101,202,202,202],
                                          'login_date':['5/7/2013 09:27:00 AM','09/08/2013 11:21:00 AM','06/06/2014 08:00:00 AM','06/06/2014 05:00:00 AM','12/11/2011 10:00:00 AM','13/10/2012 12:00:00 AM','13/12/2012 11:45:00 AM']})
                  df.login_date = pd.to_datetime(df.login_date)
                  df['logout_date'] = df.login_date + pd.Timedelta(days=5)
                  df['login_id'] = [1,1,1,1,11,11,11]
                  

                  如果您查看上述数据框中的person_id = 101,他/她在4个不同的时间戳登录和注销,但具有相同的login_id,这是不正确的。

                  相反,我想为每个唯一的登录会话生成一个新的login_id,其中每个人都会获得一个新的login_id,但在随后的登录中会保留第一个login_id信息。因此,我们可以知道它是一个序列

                  我尝试了以下方法(基于此post)

                  cumcount = df.groupby(['person_id','login_id']).login_id.cumcount()
                  df.login_id = df.login_id.mul(100000).add(cumcount)
                  
                  虽然对于给定的样例数据集,上面的操作可以很好地工作,但是当存在实际匹配的login_id110000111000021100003时,它可能会失败。因此,如果我将0000100002附加到我login_id = 11,它可能会与原始ID(110000111000021100003)

                  冲突

                  我们不必只附加零来表示序列。任何与其他ID不冲突的数字都可以(并且不一定要一个接一个地按顺序排列)。我们只需要获取一些不与其他ID冲突的ID

                  如何在不与其他用户的其他login_id冲突的情况下,生成一个随机数来指示login_id?我如何决定要追加的数字?

                  请注意,我想将此应用于大数据,LOGIN_ID可能不仅仅是实际数据中的个位数。例如,第一个LOGIN_ID甚至可以是576869578等类型的随机数。

                  推荐答案

                  我尝试根据数据帧的长度追加零,以避免与现有ID发生任何冲突。欢迎提出任何改进此解决方案的建议。此操作适用于较小的数据,但不适用于较大的数据帧

                  cumcount = df.groupby(['person_id','login_id']).login_id.cumcount()
                  df.login_id = df.groupby(['person_id','login_id']).login_id.transform(lambda x: x.shift().mul(int('1'+'0'*(len(str(len(df)))+1))).fillna(x.min())).add(cumcount)
                  

                  我认为现在ID不会冲突。有什么建议或建议吗?

                  输出如下

                  这篇关于通过在不与其他值冲突的情况下追加值来生成序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:在多个列上创建具有GroupBy的新滚动平均值列 下一篇:pandas 按日期和年份分组,并汇总金额

                  相关文章

                  <i id='rGR5J'><tr id='rGR5J'><dt id='rGR5J'><q id='rGR5J'><span id='rGR5J'><b id='rGR5J'><form id='rGR5J'><ins id='rGR5J'></ins><ul id='rGR5J'></ul><sub id='rGR5J'></sub></form><legend id='rGR5J'></legend><bdo id='rGR5J'><pre id='rGR5J'><center id='rGR5J'></center></pre></bdo></b><th id='rGR5J'></th></span></q></dt></tr></i><div id='rGR5J'><tfoot id='rGR5J'></tfoot><dl id='rGR5J'><fieldset id='rGR5J'></fieldset></dl></div>

                    <small id='rGR5J'></small><noframes id='rGR5J'>

                    1. <tfoot id='rGR5J'></tfoot>
                        <bdo id='rGR5J'></bdo><ul id='rGR5J'></ul>
                    2. <legend id='rGR5J'><style id='rGR5J'><dir id='rGR5J'><q id='rGR5J'></q></dir></style></legend>