Pandas DataFrame

2020-08-01 python pandas dataframe

J'ai un pandas DataFrame sous forme de tableau. J'essaye de le formater dans le format ci-joint mais échoue lamentablement. J'ai essayé des versions de la boucle for mais rien ne fonctionne. J'apprécierais toute aide.

PS: les dates sont générées aléatoirement mais montrent l'essentiel de ce que j'essaie de réaliser

Voici à quoi ressemble le DataFrame

C'est à quoi je veux que ça ressemble

Answers

J'ai un aperçu du code .. doit être modifié un peu si les données changent, mais veuillez vérifier si cela aide.

import pandas as pd

dfsrc = pd.DataFrame(columns=['customer', 'date'], index=None)
customer_list = ['a', 'b', 'c', 'a', 'c', 'd', 'a', 'b', 'c', 'd']
date_list = ['10/02/2020', '27/01/2020', '27/04/2020', '26/03/2020', '21/02/2020', '07/06/2020', '12/04/2020', '29/05/2020', '10/05/2020', '08/06/2020']
dfsrc.customer = customer_list
dfsrc.date = date_list

results = []
purchases = ['first_purchase', 'second_purchase', 'third_purchase']

for cust in dfsrc.customer.unique():
    rows = dfsrc[dfsrc.customer == cust].reset_index()
    cust_dict = {}
    cust_dict['customer'] = cust
    for idx, row in rows.iterrows():
        cust_dict[purchases[idx]] = row['date']
    results.append(cust_dict)

dfdest = pd.DataFrame(data=results, columns=['customer', 'first_purchase', 'second_purchase', 'third_purchase'])
dfdest

Au lieu de créer une nouvelle colonne pour chaque nouvel achat, je pense qu'il est préférable d'utiliser une seule colonne et d'avoir une valeur incrémentielle pour un achat ultérieur pour le même individu.

Utilisation des données factices

import pandas as pd
df = pd.DataFrame({'Customer': ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd']
                      , 'Date_of_Purchase': ['10/02/2020', '27/01/2020', '27/04/2020', '26/03/2020', '21/02/2020',
                                             '07/06/2020', \
                                             '12/04/2020', '29/05/2020']})

Triez d'abord la base de clients de la colonne sur le nom du client:

df.sort_values(by=['Customer'], inplace=True)

Ensuite, incrémentez le nombre d'achat en utilisant le code ci-dessous:

df['n_purchase_times'] = df.groupby(['Customer']).cumcount() + 1

qui te donnent

  Customer Date_of_Purchase  n_purchase_times
0        a       10/02/2020                 1
4        a       21/02/2020                 2
1        b       27/01/2020                 1
5        b       07/06/2020                 2
2        c       27/04/2020                 1
6        c       12/04/2020                 2
3        d       26/03/2020                 1
7        d       29/05/2020                 2

Related