簡體   English   中英

python pandas時間序列計數之前的匹配數

[英]python pandas time series count number of previous matches

鑒於:

applications = pd.DataFrame({'application_id': [1, 2, 3, 4, 5],
                   'date': ['2015-01-05', '2015-01-06', '2015-01-07', '2015- 01-08', '2015-01-09'],
                    'client_employer': ['company A', 'company B', 'company C', 'company A', 'company B'],
                    'client_name': ['Bill', 'John', 'Steve', 'Bill', 'Alex']})

表:

         date  client_employer client_name 
   0  2015-01-05 company A       John 
   1  2015-01-06 company B       Bill
   2  2015-01-07 company B       Bill
   3  2015-01-08 company A       Sarah
   4  2015-01-09 company B       Alex
   5  2015-01-10 company B       Brian

我們過去有多少位同一雇主的不同人? 沒有圈

所需的輸出:

       date  client_employer client_name  employers_count
 0  2015-01-05 company A       John         0
 1  2015-01-06 company B       Bill         0
 2  2015-01-07 company B       Bill         0
 3  2015-01-08 company A       Sarah        1
 4  2015-01-09 company B       Alex         1
 5  2015-01-10 company B       Brian        2

建議無法正常運作:

applications = pd.DataFrame({'application_id': [1, 2, 3, 4, 5, 6],
                       'date': ['2015-01-05', '2015-01-06', '2015-01-07', '2015-01-08', '2015-01-09', '2015-01-10'],
                        'client_employer': ['company B', 'company B', 'company B', 'company B', 'company B', 'company B'],
                        'client_name': ['Bill', 'John', 'Steve', 'Bill', 'Alex', 'Bill'],
                        'cnt_desired': [0, 1, 2, 2, 3, 3]})

emp_count = applications.groupby(['client_employer'])['client_name'].transform(lambda x: x.map(dict(zip(x.unique(),np.arange(len(x.unique()))))))
applications['cnt'] = emp_count

   application_id         date client_employer client_name  cnt_desired  cnt
0               1   2015-01-05       company B        Bill            0    0
1               2   2015-01-06       company B        John            1    1
2               3   2015-01-07       company B       Steve            2    2
3               4   2015-01-08       company B        Bill            2    0
4               5   2015-01-09       company B        Alex            3    3
5               6   2015-01-10       company B        Bill            3    0

首先在client_employer上使用groupby ,然后訪問client_name列,並使用基於client_name唯一值的dict作為鍵並將唯一值數量range作為值創建的map轉換列:

df['employers_count'] = df.groupby(['client_employer'])['client_name'].transform(lambda x: x.map(dict(zip(x.unique(),range(x.nunique())))))

         date client_employer client_name  employers_count
0  2015-01-05       company A       John                 0
1  2015-01-06       company B        Bill                0
2  2015-01-07       company B        Bill                0
3  2015-01-08       company A       Sarah                1
4  2015-01-09       company B        Alex                1
5  2015-01-10       company B       Brian                2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM