मेरे पास एक डेटाफ्रेम (df1) है जिसमें 3000 कॉलम हैं। प्रत्येक कॉलम एक स्टॉक टिकर से मेल खाता है। मैं एक DataFrame (df2) का उपयोग करके निर्यात करता हूं pd.read_csv
500 स्टॉक टिकरों की एक सीएसवी फ़ाइल (1 कॉलम और 500 पंक्तियों, सूचकांक को छोड़कर)। मैं df2 में स्टॉक टिकरों से मेल खाने वाले 500 कॉलम df1 से एक नए डेटाफ्रेम में कैसे निकाल सकता हूं?
मैं एक लूप लिख सकता हूं जो df2 में प्रत्येक पंक्ति पर पुनरावृत्त करता है और df1 से एक बार में एक कॉलम निकालता है लेकिन मुझे यह धीमा लगता है और शायद सबसे कुशल तरीका नहीं है।
उत्तर:
जवाब के लिए 3 № 1आप अपने डेटाफ़्रेम (@waitingkuo "उदाहरण का उपयोग करने के लिए) से कुछ कॉलम चुनने के लिए सीधे लोकल का उपयोग कर सकते हैं:
In [11]: df1.loc[:, df2.stock] # equivalent to df1[df2.stock]
Out[11]:
s1 s3
0 1 3
1 4 6
2 7 9
3 10 12
जवाब के लिए 2 № 2
आप उपयोग कर सकते हैं में शामिल होने के.
अपने प्रश्न को सरल बनाने के लिए, कहें कि हमारे पास तीन स्टॉक हैं, s1, s2, और s3 इन df1
। और हमारे पास केवल s1 और s3 है df2
In [35]: df1
Out[35]:
s1 s2 s3
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
[4 rows x 3 columns]
In [36]: df2
Out[36]:
stock
0 s1
1 s3
[2 rows x 1 columns]
शामिल होना df2
तथा df1
, हम पर और शामिल होने के लिए कॉलम सेट करने की जरूरत है df1
ताकि हमारे पास स्टॉक का नाम इंडेक्स हो:
In [37]: df2.join(df1.T, on="stock")
Out[37]:
stock 0 1 2 3
0 s1 1 4 7 10
1 s3 3 6 9 12
[2 rows x 5 columns]
यदि आप SQL के साथ समान हैं, तो इसे केवल इस रूप में सोचें
SELECT * FROM df2 JOIN df1.T ON df2.stock = df1.T.index