如何基于另一列中的值(而不是累积计数)创建有序列?

2024-04-16 19:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

data = [
    ["Item_1", "2020-06-01"],
    ["Item_1", "2021-05-01"],
    ["Item_1", "2019-02-10"],
    ["Item_2", "2020-04-01"],
    ["Item_2", "2018-05-01"],
    ["Item_2", "2018-05-01"],
    ["Item_2", "2018-05-06"],
]

df = pd.DataFrame(data, columns=["Item_ID", "Dates"])
df

我有一个数据框,其中包含一列标识符列表和一个日期列表。我想找到一种方法,将日期的顺序计数作为一个新列。我已经做了一个groupby到一个cumcount()但是它没有考虑日期相同的情况,因此顺序计数也应该相同

我想要的输出是这样的:

Item ID     Dates    Date Order
Item 1   2019-02-10      1
Item 1   2020-06-01      2
Item 1   2020-06-03      3
Item 2   2018-05-01      1
Item 2   2018-05-01      1
Item 2   2018-06-01      2
Item 2   2018-06-03      3

Tags: columns数据方法iddataframedf列表data
1条回答
网友
1楼 · 发布于 2024-04-16 19:30:09

我们可以^{}Item Id上的数据帧,然后^{}Dates列上使用method='dense'

df = df.sort_values(['Item_ID', 'Dates'], ignore_index=True) # Use if sorting required
df['Date Order'] = df.groupby('Item_ID')['Dates'].rank(method='dense')

  Item_ID       Dates  Date Order
0  Item_1  2019-02-10           1
1  Item_1  2020-06-01           2
2  Item_1  2021-05-01           3
3  Item_2  2018-05-01           1
4  Item_2  2018-05-01           1
5  Item_2  2018-05-06           2
6  Item_2  2020-04-01           3

相关问题 更多 >