2017-10-03 1 views
0

から特定の値の利用可能性を示しています、私は最初のグループにdrug_idに基づいてデータをつもりですグループと、私はこのデータフレームを持っている別の列

df1: 

    drug_id  illness 
    lexapro.1  HD 
    lexapro.1  MS 
    lexapro.2  HDED 
    lexapro.2  MS 
    lexapro.2  MS 
    lexapro.3  CD 
    lexapro.3  Sweat 
    lexapro.4  HD 
    lexapro.5  WD 
    lexapro.5  FN 

、およびHD、MSの可用性を検索病気の欄にはFNが表示されます。次に、次のような2番目のデータフレームを記入してください。

df2: 
drug_id  HD  MS FN 
lexapro.1  1  1  0 
lexapro.2  0  1  0 
lexapro.3  0  0  0 
lexapro.4  1  0  0 
lexapro.5  0  0  1 

これは私のグループ化コードです。

df1.groupby('drug_id', sort=False).isin('HD') 

が、私は'HD'df1でそのdrug_idのために利用可能であった場合、私は、各drug_idについてF2['HD']に1を割り当てることができるのか分かりません。

ありがとうございます。

答えて

2

オプション1
crosstab

pd.crosstab(df.drug_id, df.illness)[['HD', 'MS', 'FN']].ge(1).astype(int) 

illness HD MS FN 
drug_id    
lexapro.1 1 1 0 
lexapro.2 0 1 0 
lexapro.3 0 0 0 
lexapro.4 1 0 0 
lexapro.5 0 0 1 

オプション2
groupby + value_counts + unstack

df.groupby('drug_id').illness.value_counts()\ 
    .unstack()[['HD', 'MS', 'FN']].ge(1).astype(int) 

illness HD MS FN 
drug_id    
lexapro.1 1 1 0 
lexapro.2 0 1 0 
lexapro.3 0 0 0 
lexapro.4 1 0 0 
lexapro.5 0 0 1 
改善のためのスコット・ボストンに0

オプション3
get_dummies + sum

df.set_index('drug_id').illness.str.get_dummies()\ 
      .sum(level=0)[['HD', 'MS', 'FN']].ge(1).astype(int) 

      HD MS FN 
drug_id    
lexapro.1 1 1 0 
lexapro.2 0 1 0 
lexapro.3 0 0 0 
lexapro.4 1 0 0 
lexapro.5 0 0 1 

ありがとう!オプション3 `df.set_index( 'drug_id')に

+1

代替。illness.str.get_dummies()。和(レベル= 0)[ 'HD'、 'MS'、 'FN']]。 ge(1).astype(int) ' –

+0

@COLDSPEED、ありがとう。あなたが書いた3種類のコードを試しましたが、id_columnという薬を再編成しました。私のデータ列のサイズは805行で、他の薬剤名(Effexor、zoloft、...)も含まれています。それを避ける方法はありますか?再度、感謝します。 – Mary

+0

@Maryまた、この質問を閉じて、この回答を受け入れるようにしましょう〜 – Wen

2
df.groupby(['drug_id','illness']).illness.count().unstack(-1).reindex_axis(['HD', 'MS', 'FN'],axis=1).ge(0).astype(int) 
Out[276]: 
illness HD MS FN 
drug_id    
lexapro.1 1 1 0 
lexapro.2 0 1 0 
lexapro.3 0 0 0 
lexapro.4 1 0 0 
lexapro.5 0 0 1 
+0

ありがとうございます。たとえば病気の値がHDまたはCDの場合、列HDの値(df2)は1ですか?値がFNまたはHDEDの場合、df2のFNの値は1ですか?あなたがそれが良いと思うなら、私は新しい質問を作成することができます。ありがとう。 – Mary

+0

@Mary新しいものを作成して、あなたの期待しているものを表示する方が良いです – Wen

+0

OK、ありがとうございます。私は新しい質問を作成しています – Mary

関連する問題