繁体   English   中英

如何根据给定列为行中出现的唯一值分配 pandas dataframe 中的数字

[英]how to assign the number in pandas dataframe for the unique value appearing in the row based on given column

数据框看起来像

Unique Id     Date    
   H1         2/03/2022
   H1         2/03/2022
   H1         2/03/2022
   H1         3/03/2022
   H1         4/03/2022
   H2         9/03/2022
   H2         9/03/2022
   H2         10/03/2022

预期数据帧

    Unique Id     Date       Count
   H1         2/03/2022       1
   H1         2/03/2022       1
   H1         2/03/2022       1
   H1         3/03/2022       2
   H1         4/03/2022       3
   H2         9/03/2022       1
   H2         9/03/2022       1
   H2         10/03/2022      2

重复的日期应分配编号 1,否则应分配其他编号

尝试了多种方法,请协助

有很多方法可以做到这一点,主要问题是您需要将日期视为日期对象,以便在您的第二组中,十月不会提前于九月。

import pandas as pd
df = pd.DataFrame({'Unique_Id': ['H1', 'H1', 'H1', 'H1', 'H1', 'H2', 'H2', 'H2'],
 'Date': ['2/03/2022',
  '2/03/2022',
  '2/03/2022',
  '3/03/2022',
  '4/03/2022',
  '9/03/2022',
  '9/03/2022',
  '10/03/2022']})

密集等级

df.groupby('Unique_Id')['Date'].apply(lambda x: pd.to_datetime(x).rank(method='dense'))

猫代码

df.groupby('Unique_Id')['Date'].apply(lambda x: pd.to_datetime(x).astype('category').cat.codes+1)

分解

df.groupby('Unique_Id')['Date'].transform(lambda x: x.factorize()[0] + 1)

这是使用 groupby 和 transform 的一种方法

应为重复日期分配数字 1 ,否则应为其他日期分配其他数字”是问题所述,所以我选择 2 值是唯一的

df['count'] = df.groupby('Date').transform(lambda x: 1 if (x.size > 1) else 2  )
df

    Unique_Id   Date    count
0   H1       2/03/2022    1
1   H1       2/03/2022    1 
2   H1       2/03/2022    1
3   H1       3/03/2022    2
4   H1       4/03/2022    2
5   H2       9/03/2022    1
6   H2       9/03/2022    1
7   H2       10/03/2022   2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM