/ / पायथन: लूप - पायथन, पांडा के बिना किसी अन्य डेटाफ़्रेम से डेटाफ़्रेम में कई कॉलम चुनें

पायथन: लूप के बिना किसी अन्य डेटाफ्रेम से डेटाफ्रेम में एकाधिक कॉलम चुनें - पायथन, पांडा

मेरे पास एक डेटाफ्रेम (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