通过迭代另一列来创建一列

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 非常感谢您!那是完美的;)

以上是关于通过迭代另一列来创建一列的主要内容,如果未能解决你的问题,请参考以下文章

通过迭代另一个数据框中的列表列来创建数据框

是否可以引用另一列来创建“组合”查询?

在 TSQL 中,如何添加一个计数列来计算查询中的行数?

如何创建一列数组,其值来自一列并且它们的长度来自pyspark数据帧中的另一列?

使用另一列作为索引的 Pandas 子字符串

Dynamo For Revit: 如何通过选中一些模型线,来创建一堵墙