import pandas as pd
為示例問題創建一個資料框:
data = [[['A','B','C','D','E'],1000],
[['C','B'],2000],
[['X','Y','Z'],3000]]
df = pd.DataFrame(data=data, columns=['token','view'])
他長什么樣:
In[0]:df
Out[0]:
token view
0 [A, B, C, D, E] 1000
1 [C, B] 2000
2 [X, Y, Z] 3000
現在主要問題是,我需要計算 df['token'] 列中每個串列中所有唯一值的視圖數。也就是說,如果字母“B”在視圖 1000,2000 的兩行中重復,那么我將得到 3000 的總和。我創建了一個計算這些視圖總和的代碼,但它不能正常作業。下面我展示了我的代碼示例以及我想要得到的內容
我們創建一個包含所有字母的串列并將其轉換為一個集合并回傳以僅獲取唯一值而無需重復:
lst = []
for item in df['token']:
for it in item:
lst.append(it)
set_token = set(lst)
unique_token = list(set_token)
這是它的樣子:
In[1]:unique_token
Out[1]:
['D', 'E', 'Z', 'B', 'A', 'Y', 'C', 'X']
現在創建一個包含唯一值鍵的字典,并將每個 0 個視圖分配為初始值:
dict_token = {}
for item in unique_token:
dict_token[item] = 0
這是它的樣子:
In[2]:dict_token
Out[2]:
{'D': 0, 'E': 0, 'Z': 0, 'B': 0, 'A': 0, 'Y': 0, 'C': 0, 'X': 0}
現在,我創建了代碼來計算唯一字典中每個值(如果它出現在字串中)的視圖總和。但是我無法獲得當前正在迭代的同一行的 df['view'] 的值,并且我得到了一個系列,并且計數不正確,如何解決?下面是我想在最后得到的一個選項
for item in dict_token.keys():
for it in df['token']:
if item in it:
dict_token[item] = df['view']
我得到:
In[3]:dict_token
Out[3]:
{'D': 0 2000
1 4000
2 6000
Name: view, dtype: int64,
'E': 0 2000
1 4000
2 6000
Name: view, dtype: int64,
'Z': 0 2000
1 4000
2 6000
Name: view, dtype: int64,
'B': 0 4000
1 8000
2 12000
Name: view, dtype: int64,
'A': 0 2000
1 4000
2 6000
Name: view, dtype: int64,
'Y': 0 2000
1 4000
2 6000
Name: view, dtype: int64,
'C': 0 4000
1 8000
2 12000
Name: view, dtype: int64,
'X': 0 2000
1 4000
2 6000
Name: view, dtype: int64}
但我想要:
Out[3]:{'D': 1000, 'E': 1000, 'Z': 3000, 'B': 3000, 'A': 1000, 'Y': 3000, 'C': 3000, 'X': 3000}
uj5u.com熱心網友回復:
您可以explode列出您的串列,然后計算groupby.sum并轉換to_dict:
df.explode('token').groupby('token')['view'].sum().to_dict()
輸出:{'A': 1000, 'B': 3000, 'C': 3000, 'D': 1000, 'E': 1000, 'X': 3000, 'Y': 3000, 'Z': 3000}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/514857.html
上一篇:如何取出或更改類陣列物件的鍵名?
