1) आवश्यक दृष्टिकोण:
एक तेजी से कार्यान्वयन dataframe के मूल्यों को सॉर्ट और स्तंभों तदनुसार उस पर आधारित संरेखित करने के लिए किया जाएगा np.argsort
के बाद सूचकांक प्राप्त है।
df.columns[np.argsort(df.values)]
Out[156]:
Index([['a1', 'a2', 'a3', 'a4'], ['a3', 'a1', 'a2', 'a4'],
['a4', 'a2', 'a3', 'a1']],
dtype='object')
2) धीरे सामान्यीकृत दृष्टिकोण:
pd.DataFrame(df.columns[np.argsort(df.values)], df.index, np.unique(df.values))
लागू करने np.argsort
हमें डेटा हम देख रहे देता हैकुछ गति/दक्षता की लागत पर अधिक सामान्यीकृत दृष्टिकोण apply
का उपयोग dict
डेटाफ्रेम में उनके संबंधित कॉलम नामों के साथ मौजूद स्ट्रिंग/मानों के मैपिंग के बाद करना होगा।
प्राप्त श्रृंखला को उनके list
प्रतिनिधित्व में कनवर्ट करने के बाद बाद में डेटाफ्रेम कन्स्ट्रक्टर का उपयोग करें।
pd.DataFrame(df.apply(lambda s: dict(zip(pd.Series(s), pd.Series(s).index)), 1).tolist())
3) तेज़ सामान्यीकृत दृष्टिकोण:
शब्दकोशों की एक सूची प्राप्त करने df.to_dict
+ orient='records'
से के बाद, हम उस संबंधित कुंजी और मान जोड़े के समय में उन के माध्यम से पुनरावृत्ति स्वैप करने के लिए की जरूरत है एक लूप।
pd.DataFrame([{val:key for key, val in d.items()} for d in df.to_dict('r')])
नमूना परीक्षण का मामला:
df = df.assign(a5=['Foo', 'Bar', 'Baz'])
दोनों इन तरीकों का उत्पादन:
@piRSquared संपादित
सामान्यीकृत समाधान
def nic(df):
v = df.values
n, m = v.shape
u, inv = np.unique(v, return_inverse=1)
i = df.index.values
c = df.columns.values
r = np.empty((n, len(u)), dtype=c.dtype)
r[i.repeat(m), inv] = np.tile(c, n)
return pd.DataFrame(r, i, u)
मैं आधारित एक बहुत तेजी से और सामान्यीकृत numpy के साथ आ के लिए @piRSquared उपयोगकर्ता धन्यवाद देना चाहते हैं वैकल्पिक सोलन
ध्यान दें कि यह केवल विशेष परिस्थितियों में काम करता है जहां सब कुछ अच्छी तरह से प्रतिनिधित्व किया जाता है। यह एक अच्छा जवाब है, मैं बस इसे – piRSquared
धन्यवाद बता रहा हूं। मुझे लगता है कि ओपी ने अपने पद के निचले हिस्से में यह मामला दर्ज किया था। अन्यथा, यदि सभी कॉलम समान रूप से प्रदर्शित नहीं होते हैं, तो मुझे लगता है कि यह असफल हो जाएगा। –
यह समझ में आता है – piRSquared