2016-09-16 94 views
0

我有一個Pandas DataFrame描述一些測試版本,看起來像這樣中識別的特殊值:大熊貓重新標記行到GROUPBY

MailingName EmailSubject MailingID 
Promo_v1s1 Hello!   A8FEFE 
Promo_v1s2 Line 2   A8FEFE 
Promo_v2s1 Line 2   A8FEFE 
Promo_v2s2 Yo!    A8FEFE 
Promo_v2S3 Hello!   A8FEFE 
deal_v2s1  Line 2   bbb 
deal_v2s2  Yo!    bbb 
deal_v2ss  Hello   bbb 

同樣的郵寄活動,與不同版本的測試,可以通過MailingID標識(所以這將是更多特徵的groupby術語)。

MailingName,這些文件的命名約定是v + a number表示所測試的電子郵件正文版本,s + a number表明,在一個特定的組合測試的電子郵件主題行。但是,即使共享mailingID,來自v1s1的主題行不一定與v2s2中的主題行相同,因此該約定沒有幫助。

我想在每個MailingID組中都有實際上相同的所有電子郵件主題行,它們具有相同的「主題行版本號」。所以我想創造另一列會導致這樣的事情:

MailingName EmailSubject MailingID  TrueEmailVersionNumber 
Promo_v1s1 Hello!   A8FEFE    1 
Promo_v1s2 Line 2   A8FEFE    2 
Promo_v2s1 Line 2   A8FEFE    2 
Promo_v2s2 Yo!    A8FEFE    3 
Promo_v2S3 Hello!   A8FEFE    1 
deal_v2s1  Line 2   bbb     1 
deal_v2s2  Yo!    bbb     2 
deal_v2ss  Hello   bbb     3 

基本上我想添加獨特的標籤,每個組,到列。我如何使用Pandas來做到這一點?

我得到一個首發於笨重的方式,像這樣的一個想法:

def processThis(x): 
    uni = list(set(x)) 
    keys = {x_i:uni.index(x_i) for x_i in x} 
    return keys 
ab_data.groupby('mailing_id')['subject'].apply(processThis) 

但其實這並沒有屈服背字典的列表,所以即使我的第一個步驟是一個非首發。感謝您的任何建議!

回答

1
In [229]: df 
Out[229]: 
    MailingName EmailSubject MailingID 
0 Promo_v1s1  Hello! A8FEFE 
1 Promo_v1s2  Line 2 A8FEFE 
2 Promo_v2s1  Line 2 A8FEFE 
3 Promo_v2s2   Yo! A8FEFE 
4 Promo_v2S3  Hello! A8FEFE 
5 deal_v2s1  Line 2  bbb 
6 deal_v2s2   Yo!  bbb 
7 deal_v2ss  Hello  bbb 

In [230]: def f(x): 
    ...:  unq = list(x['EmailSubject'].unique()) 
    ...:  return pd.Series([unq.index(y) + 1 for y in x['EmailSubject']]) 
    ...: 

In [231]: df['TrueEmailVersionNumber'] = df.groupby('MailingID').apply(f).values 

In [232]: df 
Out[232]: 
    MailingName EmailSubject MailingID TrueEmailVersionNumber 
0 Promo_v1s1  Hello! A8FEFE      1 
1 Promo_v1s2  Line 2 A8FEFE      2 
2 Promo_v2s1  Line 2 A8FEFE      2 
3 Promo_v2s2   Yo! A8FEFE      3 
4 Promo_v2S3  Hello! A8FEFE      1 
5 deal_v2s1  Line 2  bbb      1 
6 deal_v2s2   Yo!  bbb      2 
7 deal_v2ss  Hello  bbb      3