এই প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে আমি বিশ্বাস করি যে পূর্বে আলোচিত নয় এমন কিছু দরকারী পদ্ধতির মিশ্রণে ফেলে দেওয়া এবং পারফর্মেন্সের দিক থেকে প্রস্তাবিত সমস্ত পদ্ধতির তুলনা করা ভাল হবে।
কর্মক্ষমতা ক্রমবর্ধমান ক্রমে এই সমস্যার কয়েকটি কার্যকর সমাধান এখানে দেওয়া হল are
এটি একটি সহজ- str.format
ভিত্তিক পদ্ধতির।
df['baz'] = df.agg('{0[bar]} is {0[foo]}'.format, axis=1)
df
foo bar baz
0 a 1 1 is a
1 b 2 2 is b
2 c 3 3 is c
আপনি এখানে এফ স্ট্রিং বিন্যাস ব্যবহার করতে পারেন:
df['baz'] = df.agg(lambda x: f"{x['bar']} is {x['foo']}", axis=1)
df
foo bar baz
0 a 1 1 is a
1 b 2 2 is b
2 c 3 3 is c
কলামগুলিকে রূপান্তর করতে রূপান্তর করুন chararrays
, তারপরে তাদের একসাথে যুক্ত করুন।
a = np.char.array(df['bar'].values)
b = np.char.array(df['foo'].values)
df['baz'] = (a + b' is ' + b).astype(str)
df
foo bar baz
0 a 1 1 is a
1 b 2 2 is b
2 c 3 3 is c
পান্ডে আন্ডাররেটেড তালিকা বোঝার কীভাবে হয় তা আমি বড় করে দেখতে পারি না।
df['baz'] = [str(x) + ' is ' + y for x, y in zip(df['bar'], df['foo'])]
বিকল্পভাবে, str.join
কনক্যাট ব্যবহার করে (আরও ভাল স্কেল হবে):
df['baz'] = [
' '.join([str(x), 'is', y]) for x, y in zip(df['bar'], df['foo'])]
df
foo bar baz
0 a 1 1 is a
1 b 2 2 is b
2 c 3 3 is c
স্ট্রিং ম্যানিপুলেশনে তালিকা বোধগম্যতা অর্জন করে, কারণ স্ট্রিং অপারেশনগুলি ভেক্টরাইজ করা সহজাতভাবে শক্ত, এবং বেশিরভাগ পান্ডা "ভেক্টরাইজড" ফাংশনগুলি মূলত লুপগুলির চারপাশে মোড়ানো হয়। প্যান্ডাস সহ লুপগুলির জন্য আমি এই বিষয়টি সম্পর্কে ব্যাপকভাবে লিখেছি - কখন আমার যত্ন নেওয়া উচিত? । সাধারণভাবে, যদি আপনাকে সূচী প্রান্তিককরণ সম্পর্কে চিন্তা করতে না হয় তবে স্ট্রিং এবং রেজেক্স ক্রিয়াকলাপগুলির সাথে কাজ করার সময় একটি তালিকা বোধগম্যতা ব্যবহার করুন।
ডিফল্টরূপে উপরে উল্লিখিত তালিকাটি NaN গুলি পরিচালনা করে না। যাইহোক, আপনি সর্বদা একটি চেষ্টা মোড়ানো একটি ফাংশন লিখতে পারে - যদি আপনার এটি পরিচালনা করার প্রয়োজন হয় তবে।
def try_concat(x, y):
try:
return str(x) + ' is ' + y
except (ValueError, TypeError):
return np.nan
df['baz'] = [try_concat(x, y) for x, y in zip(df['bar'], df['foo'])]
perfplot
পারফরম্যান্স পরিমাপ
পারফ্লোট ব্যবহার করে গ্রাফ উত্পন্ন হয়েছিল । এখানে সম্পূর্ণ কোড তালিকা ।
কার্যাদি
def brenbarn(df):
return df.assign(baz=df.bar.map(str) + " is " + df.foo)
def danielvelkov(df):
return df.assign(baz=df.apply(
lambda x:'%s is %s' % (x['bar'],x['foo']),axis=1))
def chrimuelle(df):
return df.assign(
baz=df['bar'].astype(str).str.cat(df['foo'].values, sep=' is '))
def vladimiryashin(df):
return df.assign(baz=df.astype(str).apply(lambda x: ' is '.join(x), axis=1))
def erickfis(df):
return df.assign(
baz=df.apply(lambda x: f"{x['bar']} is {x['foo']}", axis=1))
def cs1_format(df):
return df.assign(baz=df.agg('{0[bar]} is {0[foo]}'.format, axis=1))
def cs1_fstrings(df):
return df.assign(baz=df.agg(lambda x: f"{x['bar']} is {x['foo']}", axis=1))
def cs2(df):
a = np.char.array(df['bar'].values)
b = np.char.array(df['foo'].values)
return df.assign(baz=(a + b' is ' + b).astype(str))
def cs3(df):
return df.assign(
baz=[str(x) + ' is ' + y for x, y in zip(df['bar'], df['foo'])])