python - tutorial - ল্যাম্বদা সহ… এলিফ… অন্যটি সহ




python wiki (2)

আমি এখানে apply ব্যবহারের পরামর্শ দিচ্ছি না: এর চেয়ে ভাল বিকল্প যদি থাকে তবে এড়ানো উচিত।

উদাহরণস্বরূপ, আপনি যদি কোনও সিরিজে নিম্নলিখিত ক্রিয়াকলাপটি সম্পাদন করছেন:

if cond1:
    exp1
elif cond2:
    exp2
else:
    exp3

এটি সাধারণত np.where বা np.select জন্য ভাল ব্যবহারের ক্ষেত্রে।

numpy.where

উপরের else চেইন ব্যবহার করে লেখা যেতে পারে

np.where(cond1, exp1, np.where(cond2, exp2, ...))

np.where বাসা np.where অনুমতি দেয়। নীড়ের এক স্তরের সাহায্যে আপনার সমস্যার সমাধান করা যেতে পারে,

df['three'] = (
    np.where(
        df['one'] < 2, 
        df['one'] * 10, 
        np.where(df['one'] < 4, df['one'] ** 2, df['one'] + 10))
df

   one  two  three
0    1    6     10
1    2    7      4
2    3    8      9
3    4    9     14
4    5   10     15

numpy.select

নমনীয় সিনট্যাক্সের জন্য অনুমতি দেয় এবং সহজেই বর্ধিত হয়। এটি ফর্ম অনুসরণ করে,

np.select([cond1, cond2, ...], [exp1, exp2, ...])

বা, এই ক্ষেত্রে,

np.select([cond1, cond2], [exp1, exp2], default=exp3)

df['three'] = (
    np.select(
        condlist=[df['one'] < 2, df['one'] < 4], 
        choicelist=[df['one'] * 10, df['one'] ** 2], 
        default=df['one'] + 10))
df

   one  two  three
0    1    6     10
1    2    7      4
2    3    8      9
3    4    9     14
4    5   10     15

and / or ( if / else )

if-else lambda তবে lambda প্রয়োজন:

df['three'] = df["one"].apply(
    lambda x: (x < 2 and x * 10) or (x < 4 and x ** 2) or x + 10) 

df
   one  two  three
0    1    6     10
1    2    7      4
2    3    8      9
3    4    9     14
4    5   10     15

তালিকা উপলব্ধি

লুপী সমাধান যা apply চেয়ে এখনও দ্রুত।

df['three'] = [x*10 if x<2 else (x**2 if x<4 else x+10) for x in df['one']]
# df['three'] = [
#    (x < 2 and x * 10) or (x < 4 and x ** 2) or x + 10) for x in df['one']
# ]
df
   one  two  three
0    1    6     10
1    2    7      4
2    3    8      9
3    4    9     14
4    5   10     15

আমি যদি ল্যাবদা ফাংশনটির মধ্যে ... এলিফ ... অন্যটি ব্যবহার করে ডেটাফ্রেম কলামে ল্যাম্বডা ফাংশন প্রয়োগ করতে চাই।

ডিএফ এবং কোডটি স্মেথ। মত:

df=pd.DataFrame({"one":[1,2,3,4,5],"two":[6,7,8,9,10]})

df["one"].apply(lambda x: x*10 if x<2 elif x<4 x**2 else x+10)

স্পষ্টত এই উপায় এটি কাজ করে না। .... এলিফ .... ল্যাম্বডায় যদি অন্যভাবে প্রয়োগ করার উপায় থাকে? আমি কীভাবে একইভাবে ফলাফলের সাথে তাল মিলিয়ে তুলতে পারি?

কোন প্রতিক্রিয়া জন্য ধন্যবাদ।


নীড় if .. else s:

lambda x: x*10 if x<2 else (x**2 if x<4 else x+10)




dataframe