通过迭代另一列来创建一列
Posted
技术标签:
【中文标题】通过迭代另一列来创建一列【英文标题】: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 |
谢谢!
【问题讨论】:
【参考方案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 非常感谢您!那是完美的;)以上是关于通过迭代另一列来创建一列的主要内容,如果未能解决你的问题,请参考以下文章