2017-08-28 90 views
2

良好的一天,數列中的替換0所生產的產品,在蟒蛇出現在另一列

我有一個數據幀,看起來像這樣:

df: 
ID | Types of product | Number of product 
----|-----------------------|------------------- 
1 | NDA,0D002    |     2 
2 | CALL'NA    |     0 
3 | MMCDP,PRCP,0D002  |     3 
4 | C0D002,CALL'NA  |     1 
5 | CALL'NA,NDA,HLA  |     2 
6 | CALL'NA    |     0 
7 | CALL'NA    |     0 
8 | 0D23, CALL'NA   |     1 
9 | SA,CALL'NA   |     0 
10 | IS,SA,CALL'NA,0D003 |     1 

df['Types of Products']有一個包含不同的數據類型然後,df['Number of Products']列會提取多少種類型的產品並對它們進行計數,但您會發現df['Number of Products']列中有零個條目。 請幫我寫一段代碼,以幫助計算正確的產品數量。

我寫了下面的代碼,用1代替所有的零,但我懷疑它是正確的。請幫忙。

def product_value(df): 
ProductNumber = df['NUMBER_OF_PRODUCTS'].astype(int) 
NUMBER_OF_PRODUCTS = pd.Series(0) 
for i in range(df.shape[0]): 
    if NUMBER_OF_PRODUCTS[i]==0: 
     ProductNumber[i] = 1 
return ProductNumber 
+0

所以,你要計算你的產品的數量。你能解釋一下爲什麼這個數字是0是一個問題嗎?如果您計算您的產品數量並且產品數量爲0,那麼您的計數爲0.您要解決的問題究竟是什麼? – Zinki

+0

'df ['產品類型']。value_counts()' – Alexander

+0

我從我的數據庫中使用SQL oracle獲得了我的數據。但一些產品具有相同的名稱,但產品代碼不同,所以當我提取數據時,某些產品代碼無法識別,這就是爲什麼我得到零的原因,我嘗試在sql中升級我的表,但它仍然沒有幫助,所以我認爲我可以用Python代替產品的數量。 @Zinki –

回答

1

看來你需要transform第一新Series具有相同的大小,然後替換0值:

new=df.groupby('Types of product')['Types of product'].transform('size') 
df['Number of product'] = df['Number of product'].mask(df['Number of product'] == 0, new) 
print (df) 
    ID  Types of product Number of product 
0 1   NDA,0D002     2 
1 2    CALL'NA     3 
2 3  MMCDP,PRCP,0D002     3 
3 4  C0D002,CALL'NA     1 
4 5  CALL'NA,NDA,HLA     2 
5 6    CALL'NA     3 
6 7    CALL'NA     3 
7 8  0D23, CALL'NA     1 
8 9   SA,CALL'NA     1 
9 10 IS,SA,CALL'NA,0D003     1 

類似的解決方案:

df.loc[df['Number of product'] == 0, 'Number of product'] = new 
print (df) 
    ID  Types of product Number of product 
0 1   NDA,0D002     2 
1 2    CALL'NA     3 
2 3  MMCDP,PRCP,0D002     3 
3 4  C0D002,CALL'NA     1 
4 5  CALL'NA,NDA,HLA     2 
5 6    CALL'NA     3 
6 7    CALL'NA     3 
7 8  0D23, CALL'NA     1 
8 9   SA,CALL'NA     1 
9 10 IS,SA,CALL'NA,0D003     1