df
   pycld3   spacy   seqtolang   langid  langdetect  text_language
0   lt     unknown      ro        en         pl         unknown
1   bg     unknown      fi        en         tl         unknown
3   no        id        in        de         no         no
4   en        en        zh        en         en         en
5   en        en        en        en         en         en

Je voudrais créer une nouvelle colonne qui vérifie la valeur d'une colonne par rapport à la colonne de base: text_language. Si la valeur de df['pycld3'] == df['text_language'], une nouvelle colonne df['pycld3_true'] = 1. Sinon, la valeur est 0. Je veux faire de même pour les autres colonnes.

Production attendue

df
   pycld3   spacy   seqtolang   langid  langdetect  text_language  pycld3_true    spacy_true  ....
0   lt     unknown      ro        en         pl         un             0               1
1   bg     unknown      fi        en         tl         un             0               1
3   no        id        in        de         no         no             1               0
4   en        en        zh        en         en         en             1               1
5   en        en        en        en         en         en             1               1

Le code auquel je peux penser en ce moment est:

for row in df['pycld3']:
   if df['pycld3'][i] == df['text_language'][i]:
      df['pycld3_true'] == 1
   elif: 
      df['pycld3'][i] != df['text_language'][i]:
      df['pycld3_true'] == 0
   else:
      df['pycld3_true']== 'nan'

Le code ci-dessus est incorrect et inefficace.

0
Luc 31 août 2020 à 23:38

3 réponses

Meilleure réponse

Essaye ça

for col in df.columns[:5]:
    df[f'{col}_true'] = (df[col] == df['text_language']).astype(int)
print(df)

Sortie:

  pycld3    spacy seqtolang langid langdetect text_language  pycld3_true  spacy_true  seqtolang_true  langid_true  langdetect_true
0     lt  unknown        ro     en         pl       unknown            0           1               0            0                0
1     bg  unknown        fi     en         tl       unknown            0           1               0            0                0
3     no       id        in     de         no            no            1           0               0            0                1
4     en       en        zh     en         en            en            1           1               0            1                1
5     en       en        en     en         en            en            1           1               1            1                1
0
deadshot 31 août 2020 à 20:58

Utilisez la chaîne f, la compréhension de la liste pour rechercher les valeurs à la fois

for c in df.iloc[:,:-1]:
     df[f'{c}_true'] = df.apply(lambda x: x.text_language in x[c], axis=1).astype(int)
print(df)


  pycld3    spacy seqtolang langid langdetect text_language  pycld3_true  \
0     lt  unknown        ro     en         pl            un            0   
1     bg  unknown        fi     en         tl            un            0   
3     no       id        in     de         no            no            1   
4     en       en        zh     en         en            en            1   
5     en       en        en     en         en            en            1   

   spacy_true  seqtolang_true  langid_true  langdetect_true  
0           1               0            0                0  
1           1               0            0                0  
3           0               0            0                1  
4           1               0            1                1  
5           1               1            1                1 

Vous pouvez également essayer colonne par colonne comme suit si vous aviez juste besoin des deux indiqués dans l'exemple

df['pycld3_true']=df['pycld3'].isin(df['text_language']).astype(int)
df['spacy_true']=df.apply(lambda x: x.text_language in x.spacy, axis=1).astype(int)
print(df)


  pycld3    spacy seqtolang langid langdetect text_language  pycld3_true  \
0     lt  unknown        ro     en         pl            un            0   
1     bg  unknown        fi     en         tl            un            0   
3     no       id        in     de         no            no            1   
4     en       en        zh     en         en            en            1   
5     en       en        en     en         en            en            1   

   spacy_true  
0           1  
1           1  
3           0  
4           1  
5           1  
0
wwnde 31 août 2020 à 21:32
df
Out[6]: 
  one  two three
0  10  1.2   4.2
1  15   70  0.03
2   8    5     0
df['new'] = df['one']==df['two']
df
Out[8]: 
  one  two three    new
0  10  1.2   4.2  False
1  15   70  0.03  False
2   8    5     0  False

df['new'] = df['new'].astype(int)
df
Out[10]: 
  one  two three  new
0  10  1.2   4.2    0
1  15   70  0.03    0
2   8    5     0    0
0
Anurag Reddy 31 août 2020 à 20:44