2015-01-07 12 views
5

मैं बस दिए गए डेटाफ्रेम के कॉलम ऑर्डर को रिवर्स करना चाहता हूं।पायथन पांडा: रिवर्स डीएफ कॉलम ऑर्डर

मेरे DataFrame:

data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012], 
    'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'], 
    'wins': [11, 8, 10, 15, 11, 6, 10, 4], 
    'losses': [5, 8, 6, 1, 5, 10, 6, 12]} 
football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses']) 

वास्तविक उत्पादन:

year  team wins losses 
0 2010 Bears 11  5 
1 2011 Bears  8  8 
2 2012 Bears 10  6 
3 2011 Packers 15  1 
4 2012 Packers 11  5 
5 2010 Lions  6  10 
6 2011 Lions 10  6 
7 2012 Lions  4  12 

मुझे लगा कि यह काम करेगा, लेकिन यह पंक्ति आदेश नहीं स्तंभ क्रम उलट:

football[::-1] 

मैं भी करने की कोशिश की:

football.columns = football.columns[::-1] 

लेकिन इससे कॉलम लेबल उलट दिए गए और पूरे कॉलम को ही नहीं।

उत्तर

9

आपके द्वारा पहले से प्रयास किए जाने वाले एक समाधान का उपयोग करना है:

>>> football[football.columns[::-1]] 
    losses wins  team year 
0  5 11 Bears 2010 
1  8  8 Bears 2011 
2  6 10 Bears 2012 
3  1 15 Packers 2011 
4  5 11 Packers 2012 
5  10  6 Lions 2010 
6  6 10 Lions 2011 
7  12  4 Lions 2012 

football.columns[::-1] स्तंभों की DataFrame के अनुक्रम के आदेश को उलट देता है, और football[...] DataFrame इस नए अनुक्रम का उपयोग reindexes। ::-1 पीछे की ओर कदम का मतलब है कॉलम के माध्यम से

football.iloc[:, ::-1] 

पहले : का अर्थ है "सभी पंक्तियों ले",:

एक ही बात को प्राप्त करने के लिए एक और अधिक संक्षिप्त तरीका iloc इंडेक्सर के साथ है।

loc सूचकांक @ PietroBattiston के उत्तर में उल्लिखित सूचकांक उसी तरह काम करता है।

1

आप कल्पना अनुक्रमण .ix उपयोग कर सकते हैं, कॉलम गुजरती हैं और फिर सूची रिवर्स क्रम बदलने के लिए:

In [27]: 

football.ix[::,football.columns[::-1]] 
Out[27]: 
    losses wins  team year 
0  5 11 Bears 2010 
1  8  8 Bears 2011 
2  6 10 Bears 2012 
3  1 15 Packers 2011 
4  5 11 Packers 2012 
5  10  6 Lions 2010 
6  6 10 Lions 2011 
7  12  4 Lions 2012 

समय

In [32]: 

%timeit football[football.columns[::-1]] 
1000 loops, best of 3: 421 µs per loop 
In [33]: 

%timeit football.ix[::,football.columns[::-1]] 
1000 loops, best of 3: 403 µs per loop 

फैंसी अनुक्रमण इस मामले

में मामूली तेजी से होता है
4

EdChum's answer बंद ... लेकिन तेजी से:

In [3]: %timeit football.ix[::,::-1] 
1000 loops, best of 3: 255 µs per loop 

In [4]: %timeit football.ix[::,football.columns[::-1]] 
1000 loops, best of 3: 491 µs per loop 

यह भी ध्यान दें एक पेट के अनावश्यक है:

In [5]: all(football.ix[:,::-1] == football.ix[::,::-1]) 
Out[5]: True 

संपादित करें: एक और (न्यूनतम) सुधार नहीं बल्कि .loc का उपयोग करके लाया जाता है से football.loc[:,::-1] में .ix से अधिक।

संबंधित मुद्दे