【问题标题】:Create a column by iterating on another column通过迭代另一列来创建一列
【发布时间】:2021-12-11 16:45:15
【问题描述】:

我有两列,一列带有 ID,另一列带有交易日期。

ID Date
A 2019-04-30
A 2020-12-15
B 2019-08-24
B 2019-09-29
B 2019-10-14

等等……

我想创建一个按 ID 对日期排序的列。

ID Date Type
A 2019-04-30 Order_1
A 2020-12-15 Order_2
B 2019-08-24 Order_1
B 2019-09-29 Order_2
B 2019-10-14 Order_3

谢谢!

【问题讨论】:

    标签: pandas loops date


    【解决方案1】:

    将GroupBy.cumcount 用于计数器并添加1 并强制转换为字符串,因此可以添加Order_:

    df['Type'] = 'Order_' + df.groupby('ID').cumcount().add(1).astype(str)
    
    df['diff'] = df.groupby('ID')['Date'].diff().dt.days
    

    我遇到了一个问题,当我旋转表格时,我们按字母顺序排列日期(Order_1、Order_10、Order_100、..),而不是 Order_1、Order_2。因为它是一个字符串。有没有办法解决这个问题?

    将值转换为数字并在旋转后使用DataFrame.add_prefix:

    df['Type'] = df.groupby('ID').cumcount().add(1)
    
    df1 = df.pivot('ID','Type','diff').add_prefix('Order_')
    

    【讨论】:

    • 传奇!工作完美。如果我把这个新表放在一个数据透视表中,我如何计算日期之间的差异?
    • 我遇到了一个问题,当我旋转表格时,我们按字母顺序排列日期(Order_1、Order_10、Order_100、..),而不是 Order_1、Order_2。因为它是一个字符串。有没有办法解决这个问题?
    • @FilipeCarvalho - 稍等。
    • 我想我明白了,只需从列名称中删除“Order_”,因为它与问题无关。不过,希望帮助计算日期之间的差异:)
    • jezrael 非常感谢您!那是完美的;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2017-03-25
    • 1970-01-01
    • 2021-12-12
    • 2015-09-08
    相关资源
    最近更新 更多