2017-10-13 40 views
1

我有一個DataFrame具有下面的數據點。這裏count表示articleTag被讀取的次數。對於articleId,articleTagtag;即對於商品Id 590020,存在四個標籤A,B,C,D,其被表示爲一個字符串。計數次數字符串的一部分存在的是DataFrame

 articleId  articleTag  count 
    0  590020  A,B,C,D    2 
    1  466322  A,B,E    3 
    2  466322  B     2 
    3  466322  A     1 

我需要找出tag distribution即每個標籤它是如何出現在文章的時候很多號,有多少次它的讀數。

就像上面的示例Dataframe一樣。

Tag  Present  Read 
A   3   6 
B   3   7 
C   1   2 
D   1   2 
E   1   3 

PI help。

回答

1

你可以做這樣的事情:

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([{"articleId": 590020, "articleTag": "A,B,C,D ", "count": 6}, {"articleId": 590021, "articleTag": "A,B,E", "count": 3}]) 

In [3]: df[df.articleTag.str.contains("A")]['count'].sum() 
Out: 9 

In [4]: len(df[df.articleTag.str.contains("A")]) 
Out[4]: 2 

第一個是你的「讀取」值,第二個是你的「當前」值。

要找到所有的各種標籤,我可能會做這樣的事情:

In [5]: tag_df = df.articleTag.str.split(',', expand=True) 

In [6]: for column in tag_df.columns: 
...:  print(tag_df[column].unique()) 
...:  
...:  
['A'] 
['B'] 
['C' 'E'] 
['D ' None] 

而是它們打印出來的,你可以將它們添加到set和收集你需要尋找這種方式,所有標籤。

In [7]: unique_tags = set() 

In [8]: for column in tag_df.columns: 
    ...:  unique_tags |= set(tag_df[column].unique()) 
    ...:  
    ...:  
    ...:  
    ...:  

In [9]: unique_tags 
Out[9]: {'B', 'A', 'C', 'E', None, 'D '} 

當然,你將不得不拔出無瓦爾。

1
df = pd.DataFrame([{"articleId": 590020, "articleTag": "A,B,C,D ", "count": 2}, 
        {"articleId": 590021, "articleTag": "A,B,E", "count": 3}, 
        {"articleId": 466322, "articleTag": "B", "count": 2}, 
        {"articleId": 466322, "articleTag": "A", "count": 1}]) 
articles = [] 
for val in df['articleTag'].values: 
    articles.extend(val.split(',')) 
unique_articles = list(set(articles)) 

final_dict = {} 
final_dict['article'] = unique_articles 
final_count = [] 
final_read = [] 
for article in unique_articles: 
     l = [val for val in df['articleTag'].values if article in val] 
     l2 = [val[1] for val in zip(df['articleTag'].values,df['count'].values) if article in val[0]] 
     final_read.append(sum(l2)) 
     final_count.append(len(l)) 
final_dict['Present'] = final_count 
final_dict['Read'] = final_read 
pd.DataFrame(final_dict) 
+0

有了上面的代碼,字符串的一部分也正在考慮之中。例如,如果標籤是「naren」,其讀取計數將被計算。所以如果它對'narendra modi,bjp'進行測試,那麼它的計數就會增加。但我不想要這個。標籤必須作爲整體呈現。 –

+0

使用==代替'in' –

相關問題