Maison > développement back-end > Tutoriel Python > Créer une colonne datetime aléatoire conditionnelle à une autre colonne datetime pandas

Créer une colonne datetime aléatoire conditionnelle à une autre colonne datetime pandas

王林
Libérer: 2024-02-10 09:24:04
avant
1321 Les gens l'ont consulté

创建随机日期时间列,条件是另一个日期时间列 pandas

Contenu de la question

J'ai une trame de données pandas df_sample :

columna columnb
a         aa
a         ab
b         ba
b         bb
b         bc
Copier après la connexion

J'ai créé une colonne aléatoire contenant des objets date :

df_sample['contract_starts'] = np.random.choice(pd.date_range('2024-01-01', '2024-05-01'), len(df_sample))
Copier après la connexion

Cela donne le résultat suivant :

columna columnb contract_starts
a         aa     2024-01-21
a         ab     2024-03-03
b         ba     2024-01-18
b         bb     2024-02-18
b         bc     2024-04-03
Copier après la connexion

Comment créer une autre colonne datetime contract_noted qui a également une plage de valeurs donnée (par exemple jusqu'au 01/05/2024) mais pas plus de contract_startscolonne, par exemple :

columnA columnB contract_starts contract_noted
A         AA     2024-01-21      2024-01-20
A         AB     2024-03-03      2024-01-01
B         BA     2024-01-18      2024-01-13
B         BB     2024-02-18      2024-02-01
B         BC     2024-04-03      2024-03-28
Copier après la connexion


Bonne réponse


Vous pouvez soustraire un incrément de temps aléatoire d'une colonne par contract_starts 列中减去随机时间增量numpy.random.randintto_timedelta numpy.random.randint avec to_timedelta< /a>:

df_sample['contract_noted'] = (df_sample['contract_starts'] - 
                               pd.to_timedelta(np.random.randint(1,30, len(df_sample)), 
                                               unit='d'))

print (df_sample)
  columna columnb contract_starts contract_noted
0       a      aa      2024-04-18     2024-03-21
1       a      ab      2024-02-12     2024-01-22
2       b      ba      2024-02-21     2024-02-02
3       b      bb      2024-04-12     2024-03-29
4       b      bc      2024-02-10     2024-02-03
Copier après la connexion

Si vous avez également besoin de la date/heure entre le début et la fin, comme contract_starts 生成 1 Générez des nombres entiers entre 1 et la différence par rapport à la date/heure de début :

days =(df_sample['contract_starts'] - pd.Timestamp('2024-01-01')).dt.days
print (days)

df_sample['contract_noted'] = (df_sample['contract_starts'] - 
                               pd.to_timedelta(np.random.randint(1,days, len(df_sample)), 
                                               unit='d'))
print (df_sample)
  columnA columnB contract_starts contract_noted
0       A      AA      2024-02-09     2024-01-09
1       A      AB      2024-04-26     2024-02-23
2       B      BA      2024-04-10     2024-04-06
3       B      BB      2024-01-31     2024-01-07
4       B      BC      2024-01-14     2024-01-08
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal