2017-08-28 4 views
2

良い一日Pythonで別の列に表示された製品の数だけの列に0を置き換えます私はこのようになりますデータフレーム持って</p> <p>

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 ['Types of Products']。value_counts()' – Alexander

+0

SQL oracleを使用してデータベースから自分のデータを取得しました。製品のいくつかは同じ名前だが製品コードが異なるので、データを引っ張ったときにいくつかの製品コードが認識されないため、SQLがテーブルをアップグレードしようとしたが、まだ助けにはならなかったので、おそらく、代わりにPythonを使用して製品の数を行うことができます。 @ジンキー –

答えて

1

は、あなたが同じサイズで、新しいSeriesのための最初のtransformを必要とし、その後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 
関連する問題