मेरे पास डेटाफ्रेम है

df = columnA=[1,2,3,4,5,6]
     columnB=['Apple AA','Banana BB',NaN,'Strawberry DD',NaN,'Blueberry EE']

यदि कॉलमबी में मान हैं तो मैं एक नया कॉलम बनाना चाहता हूं

df = columnA=[1,2,3,4,5,6]
     columnB=['Apple AA','Banana BB',NaN,'Strawberry DD',NaN,'Blueberry EE']
     columnC=[1,1,0,1,0,1]

मेरा कोड:

df[columnC] = df[columnB].map(lambda x: 1 if len(x) > 0 else 0 if len(x) == 0)

या

columnC = np.repeat(0, df.shape[0]
for i in df:
   if len(df[columnB]) > 0:
      df[columnC] = 1

Both not work :(
1
EzrealReal 23 नवम्बर 2019, 09:25

3 जवाब

सबसे बढ़िया उत्तर

आप .notnull() का उपयोग यह जांचने के लिए कर सकते हैं कि क्या आपके मान NaN नहीं हैं

import pandas as pd
import numpy as np
df = pd.DataFrame({'columnA':[1,2,3,4,5,6],
                   'columnB':['Apple AA','Banana BB',np.NaN,'Strawberry DD',np.NaN,'Blueberry EE']})

df['columnC'] = df['columnB'].notnull()*1

बूलियन को बाइनरी मानों में बदलने के लिए 1 से गुणा का उपयोग किया जाता है। इसके अलावा सावधान रहें कि अपने कॉलम नामों के आसपास उद्धरण न भूलें।

2
fmarm 23 नवम्बर 2019, 09:35

यहाँ कोड है:

df = pd.DataFrame({'A': [1,2,3,4,5,6], 'B': ['Apple', 'Ba', np.nan, 'St', np.nan, 'e']})

df['C'] = df['B'].isna()

 A      B      C
0  1  Apple  False
1  2     Ba  False
2  3    NaN   True
3  4     St  False
4  5    NaN   True
5  6      e  False

फिर बूलियन मान को 0 1 . में बदलें

df['C'] = df['C'].apply(lambda x: 1 if not x else 0)


   A      B  C
0  1  Apple  1
1  2     Ba  1
2  3    NaN  0
3  4     St  1
4  5    NaN  0
5  6      e  1

1
祖tp 23 नवम्बर 2019, 09:33

क्या आप कृपया numpy से np.where का उपयोग करके अनुसरण करने का प्रयास कर सकते हैं।

df['C']=np.where(df['B'].notnull(),1,0)

आउटपुट निम्नानुसार होगा।

        A           B       C
1   Apple           AA      1
2   Banana          BB      1
3   NaN             None    0
4   Strawberry      DD      1
5   NaN             None    0
6   Blueberry       EE      1
1
RavinderSingh13 23 नवम्बर 2019, 09:41