पांडा में निम्नलिखित डेटाफ्रेम को दोबारा बदलने का सबसे अच्छा तरीका क्या है? यह DataFrame df
प्रत्येक नमूने (s1
और इस मामले में s2
) के लिए x,y
मान होते हैं और इस तरह दिखता है:स्तंभ लेबल के आधार पर पांडा में डेटाफ्रेम को दोबारा बदलना
In [23]: df = pandas.DataFrame({"s1_x": scipy.randn(10), "s1_y": scipy.randn(10), "s2_x": scipy.randn(10), "s2_y": scipy.randn(10)})
In [24]: df
Out[24]:
s1_x s1_y s2_x s2_y
0 0.913462 0.525590 -0.377640 0.700720
1 0.723288 -0.691715 0.127153 0.180836
2 0.181631 -1.090529 -1.392552 1.530669
3 0.997414 -1.486094 1.207012 0.376120
4 -0.319841 0.195289 -1.034683 0.286073
5 1.085154 -0.619635 0.396867 0.623482
6 1.867816 -0.928101 -0.491929 -0.955295
7 0.920658 -1.132057 1.701582 -0.110299
8 -0.241853 -0.129702 -0.809852 0.014802
9 -0.019523 -0.578930 0.803688 -0.881875
s1_x
और s1_y
नमूना 1 के लिए x/y मान होते हैं, s2_x, s2_y
नमूना 2 के लिए नमूना मान हैं , आदि। इसे डेटाफ्रेम में केवल x
, y
कॉलम युक्त कैसे बदला जा सकता है लेकिन इसमें अतिरिक्त कॉलम sample
है जो डेटाफ्रेम में प्रत्येक पंक्ति के लिए कहता है कि यह s1
या s2
से है? जैसे
x y sample
0 0.913462 0.525590 s1
1 0.723288 -0.691715 s1
2 0.181631 -1.090529 s1
3 0.997414 -1.486094 s1
...
5 0.396867 0.623482 s2
...
यह, पर बाद में Rpy2 साथ बातें की साजिश रचने के लिए उपयोगी है के बाद से कई अनुसंधान की साजिश रचने सुविधाओं इस समूहीकरण चर का उपयोग कर सकते हैं, ताकि dataframe देगी के लिए मेरी प्रेरणा है।
मुझे लगता है कि इस सवाल का जवाब चांग वह द्वारा दिए गए dataframes एक अद्वितीय सूचकांक है, यह एक तरह से अनुवाद नहीं करता है:
In [636]: df = pandas.DataFrame({"s1_x": scipy.randn(10), "s1_y": scipy.randn(10), "s2_x": scipy.randn(10), "s2_y": scipy.randn(10), "names": range(10)})
In [637]: df
Out[637]:
names s1_x s1_y s2_x s2_y
0 0 0.672298 0.415366 1.034770 0.556209
1 1 0.067087 -0.851028 0.053608 -0.276461
2 2 -0.674174 -0.099015 0.864148 -0.067240
3 3 0.542996 -0.813018 2.283530 2.793727
4 4 0.216633 -0.091870 -0.746411 -0.421852
5 5 0.141301 -1.537721 -0.371601 -1.594634
6 6 1.267148 -0.833120 0.369516 -0.671627
7 7 -0.231163 -0.557398 1.123155 0.865140
8 8 1.790570 -0.428563 0.668987 0.632409
9 9 -0.820315 -0.894855 0.673247 -1.195831
In [638]: df.columns = pandas.MultiIndex.from_tuples([tuple(c.split('_')) for c in df.columns])
In [639]: df.stack(0).reset_index(1)
Out[639]:
level_1 x y
0 s1 0.672298 0.415366
0 s2 1.034770 0.556209
1 s1 0.067087 -0.851028
1 s2 0.053608 -0.276461
2 s1 -0.674174 -0.099015
2 s2 0.864148 -0.067240
3 s1 0.542996 -0.813018
3 s2 2.283530 2.793727
4 s1 0.216633 -0.091870
4 s2 -0.746411 -0.421852
5 s1 0.141301 -1.537721
5 s2 -0.371601 -1.594634
6 s1 1.267148 -0.833120
6 s2 0.369516 -0.671627
7 s1 -0.231163 -0.557398
7 s2 1.123155 0.865140
8 s1 1.790570 -0.428563
8 s2 0.668987 0.632409
9 s1 -0.820315 -0.894855
9 s2 0.673247 -1.195831
परिवर्तन काम किया लेकिन इस प्रक्रिया में स्तंभ "names"
खो गया था। मैं "names"
कॉलम को डीएफ में कैसे रख सकता हूं जबकि अभी भी उन कॉलम पर पिघलने वाले परिवर्तन कर रहे हैं जिनके नाम _
हैं? "names"
कॉलम केवल डेटाफ्रेम में प्रत्येक पंक्ति के लिए एक अद्वितीय नाम असाइन करता है। उदाहरण के लिए यह संख्यात्मक है लेकिन मेरे डेटा में वे स्ट्रिंग पहचानकर्ता हैं।
धन्यवाद।
आप 'reset_index' कॉल और इसे यहाँ क्या कर रहा है समझा सकते हैं? साथ ही, 'level_1' अनुक्रमणिका से छुटकारा पाना संभव है? मैं यह भी नहीं देखता कि मैं इस – user248237dfsf
का उपयोग करके प्रत्येक पंक्ति के लिए लेबल कॉलम तक कैसे पहुंच सकता हूं, इसके अलावा, क्या होगा यदि डेटाफ्रेम के पास एक अनूठी अनुक्रमणिका शुरू हो? – user248237dfsf
कॉल करने के बाद कॉल करने के बाद, "s1 s2 s1 s2 ..." पंक्ति लेबल (अनुक्रमणिका) का हिस्सा है। reset_index बस इसे इसके बजाय एक कॉलम बनाता है। इसके बाद यह अभी भी एक डेटाफ्रेम है इसलिए इंडेक्स/कॉलम एक्सेस अभी भी वही है। –