pandas
MultiIndex
खोज…
लेवल द्वारा मल्टीइंडेक्स से चुनें
निम्नलिखित DataFrame को देखते हुए:
In [11]: df = pd.DataFrame(np.random.randn(6, 3), columns=['A', 'B', 'C'])
In [12]: df.set_index(['A', 'B'], inplace=True)
In [13]: df
Out[13]:
C
A B
0.902764 -0.259656 -1.864541
-0.695893 0.308893 0.125199
1.696989 -1.221131 -2.975839
-1.132069 -1.086189 -1.945467
2.294835 -1.765507 1.567853
-1.788299 2.579029 0.792919
A
का मान प्राप्त करें, नाम से:
In [14]: df.index.get_level_values('A')
Out[14]:
Float64Index([0.902764041011, -0.69589264969, 1.69698924476, -1.13206872067,
2.29483481146, -1.788298829],
dtype='float64', name='A')
या स्तर की संख्या से:
In [15]: df.index.get_level_values(level=0)
Out[15]:
Float64Index([0.902764041011, -0.69589264969, 1.69698924476, -1.13206872067,
2.29483481146, -1.788298829],
dtype='float64', name='A')
और एक विशिष्ट सीमा के लिए:
In [16]: df.loc[(df.index.get_level_values('A') > 0.5) & (df.index.get_level_values('A') < 2.1)]
Out[16]:
C
A B
0.902764 -0.259656 -1.864541
1.696989 -1.221131 -2.975839
रेंज में कई कॉलम शामिल हो सकते हैं:
In [17]: df.loc[(df.index.get_level_values('A') > 0.5) & (df.index.get_level_values('B') < 0)]
Out[17]:
C
A B
0.902764 -0.259656 -1.864541
1.696989 -1.221131 -2.975839
2.294835 -1.765507 1.567853
विशिष्ट मान निकालने के लिए आप xs (क्रॉस-सेक्शन) का उपयोग कर सकते हैं:
In [18]: df.xs(key=0.9027639999999999)
Out[18]:
C
B
-0.259656 -1.864541
In [19]: df.xs(key=0.9027639999999999, drop_level=False)
Out[19]:
C
A B
0.902764 -0.259656 -1.864541
MultiIndex के साथ DataFrame पर इरेट करें
निम्नलिखित DataFrame को देखते हुए:
In [11]: df = pd.DataFrame({'a':[1,1,1,2,2,3],'b':[4,4,5,5,6,7,],'c':[10,11,12,13,14,15]})
In [12]: df.set_index(['a','b'], inplace=True)
In [13]: df
Out[13]:
c
a b
1 4 10
4 11
5 12
2 5 13
6 14
3 7 15
आप MultiIndex के किसी भी स्तर से पुनरावृति कर सकते हैं। उदाहरण के लिए, level=0
(आप नाम से स्तर का चयन भी कर सकते हैं जैसे level='a'
):
In[21]: for idx, data in df.groupby(level=0):
print('---')
print(data)
---
c
a b
1 4 10
4 11
5 12
---
c
a b
2 5 13
6 14
---
c
a b
3 7 15
आप नाम से स्तर भी चुन सकते हैं जैसे `स्तर = 'बी':
In[22]: for idx, data in df.groupby(level='b'):
print('---')
print(data)
---
c
a b
1 4 10
4 11
---
c
a b
1 5 12
2 5 13
---
c
a b
2 6 14
---
c
a b
3 7 15
एक MultiIndex की स्थापना और छंटनी
यह उदाहरण दिखाता है कि एक MultiIndex
में MultiIndex
सेट करने के लिए कॉलम डेटा का उपयोग कैसे किया pandas.DataFrame
। pandas.DataFrame
।
In [1]: df = pd.DataFrame([['one', 'A', 100], ['two', 'A', 101], ['three', 'A', 102],
...: ['one', 'B', 103], ['two', 'B', 104], ['three', 'B', 105]],
...: columns=['c1', 'c2', 'c3'])
In [2]: df
Out[2]:
c1 c2 c3
0 one A 100
1 two A 101
2 three A 102
3 one B 103
4 two B 104
5 three B 105
In [3]: df.set_index(['c1', 'c2'])
Out[3]:
c3
c1 c2
one A 100
two A 101
three A 102
one B 103
two B 104
three B 105
आपके द्वारा सेट करने के बाद आप इंडेक्स को ठीक कर सकते हैं:
In [4]: df.set_index(['c1', 'c2']).sort_index()
Out[4]:
c3
c1 c2
one A 100
B 103
three A 102
B 105
two A 101
B 104
एक सॉर्ट किए गए इंडेक्स के परिणामस्वरूप, पहले स्तर पर कुछ अधिक कुशल लुकअप होंगे:
In [5]: df_01 = df.set_index(['c1', 'c2'])
In [6]: %timeit df_01.loc['one']
1000 loops, best of 3: 607 µs per loop
In [7]: df_02 = df.set_index(['c1', 'c2']).sort_index()
In [8]: %timeit df_02.loc['one']
1000 loops, best of 3: 413 µs per loop
इंडेक्स सेट होने के बाद, आप विशिष्ट रिकॉर्ड या रिकॉर्ड के समूहों के लिए लुकअप कर सकते हैं:
In [9]: df_indexed = df.set_index(['c1', 'c2']).sort_index()
In [10]: df_indexed.loc['one']
Out[10]:
c3
c2
A 100
B 103
In [11]: df_indexed.loc['one', 'A']
Out[11]:
c3 100
Name: (one, A), dtype: int64
In [12]: df_indexed.xs((slice(None), 'A'))
Out[12]:
c3
c1
one 100
three 102
two 101
MultiIndex कॉलम को मानक कॉलम में कैसे बदलें
MultiIndex कॉलम के साथ DataFrame दिया
# build an example DataFrame
midx = pd.MultiIndex(levels=[['zero', 'one'], ['x','y']], labels=[[1,1,0,],[1,0,1,]])
df = pd.DataFrame(np.random.randn(2,3), columns=midx)
In [2]: df
Out[2]:
one zero
y x y
0 0.785806 -0.679039 0.513451
1 -0.337862 -0.350690 -1.423253
यदि आप स्तंभों को मानक स्तंभों में बदलना चाहते हैं (मल्टीइंडेक्स नहीं), तो बस स्तंभों का नाम बदलें।
df.columns = ['A','B','C']
In [3]: df
Out[3]:
A B C
0 0.785806 -0.679039 0.513451
1 -0.337862 -0.350690 -1.423253
MultiIndex के लिए मानक कॉलम कैसे बदलें
एक मानक DataFrame से शुरू करें
df = pd.DataFrame(np.random.randn(2,3), columns=['a','b','c'])
In [91]: df
Out[91]:
a b c
0 -0.911752 -1.405419 -0.978419
1 0.603888 -1.187064 -0.035883
अब MultiIndex में बदलने के लिए, MultiIndex
ऑब्जेक्ट बनाएं और इसे df.columns
को असाइन करें।
midx = pd.MultiIndex(levels=[['zero', 'one'], ['x','y']], labels=[[1,1,0,],[1,0,1,]])
df.columns = midx
In [94]: df
Out[94]:
one zero
y x y
0 -0.911752 -1.405419 -0.978419
1 0.603888 -1.187064 -0.035883
मल्टीआंडेक्स कॉलम
मल्टीइंडेक्स का उपयोग मल्टीलेवल कॉलम के साथ डेटाफ्रेम बनाने के लिए भी किया जा सकता है। बस DataFrame कमांड में columns
कीवर्ड का उपयोग करें।
midx = pd.MultiIndex(levels=[['zero', 'one'], ['x','y']], labels=[[1,1,0,],[1,0,1,]])
df = pd.DataFrame(np.random.randn(6,4), columns=midx)
In [86]: df
Out[86]:
one zero
y x y
0 0.625695 2.149377 0.006123
1 -1.392909 0.849853 0.005477
सूचकांक में सभी तत्वों को प्रदर्शित करना
इंडेक्स के सभी तत्वों को देखने के लिए प्रिंट विकल्प को बदल दें जो मल्टीइंडेक्स के प्रदर्शन को "स्पार्साइज करता है"।
pd.set_option('display.multi_sparse', False)
df.groupby(['A','B']).mean()
# Output:
# C
# A B
# a 1 107
# a 2 102
# a 3 115
# b 5 92
# b 8 98
# c 2 87
# c 4 104
# c 9 123