팬더 데이터 프레임

2020-08-01 python pandas dataframe

표 형식의 팬더 DataFrame이 있습니다. 첨부 된 형식으로 포맷하려고하지만 비참하게 실패합니다. for 루프의 버전을 시도했지만 아무것도 작동하지 않습니다. 도움을 주시면 감사하겠습니다.

추신 : 날짜는 무작위로 생성되지만 달성하려는 목표의 요지를 보여줍니다.

이것이 DataFrame의 모습입니다

이것이 내가 원하는 모습입니다

Answers

코드의 대략적인 스케치가 있습니다. 데이터가 변경되면 약간 편집해야하지만 이것이 도움이되는지 확인하십시오.

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

각각의 새로운 구매에 대해 새로운 칼럼을 생성하는 대신 단일 칼럼을 사용하는 것이 더 좋으며 동일한 개인에 대한 후속 구매에 대한 증분 값이 있다고 생각합니다.

더미 데이터 사용

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']})

먼저 고객 이름을 기준으로 고객 열을 정렬하십시오.

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

그런 다음 아래 코드를 사용하여 구매 수를 늘리십시오.

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

너에게주는

  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