इस सवाल का जवाब पहले ही दिया जा चुका है, लेकिन मेरा मानना है कि कुछ उपयोगी तरीकों को पहले से ही मिश्रण में चर्चा नहीं करना अच्छा होगा, और प्रदर्शन के मामले में प्रस्तावित सभी तरीकों की तुलना करें।
प्रदर्शन के बढ़ते क्रम में, इस समस्या के कुछ उपयोगी समाधान दिए गए हैं।
यह एक साधारण- 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'])])