2014-04-07 7 views
16

मैं एक dataframe निम्नलिखित स्पष्ट कारणों के लिए काम नहीं करता डुप्लीकेट सूचकांक ड्रॉप करना चाहते हैं:रास्ता

myDF.drop_duplicates(cols=index) 

और

myDF.drop_duplicates(cols='index') 

के लिए लग रहा है एक कॉलम 'सूचकांक'

नामित मैं क्या करना है मैं एक सूचकांक ड्रॉप करना चाहते हैं:

myDF['index'] = myDF.index 
myDF= myDF.drop_duplicates(cols='index') 
myDF.set_index = myDF['index'] 
myDF= myDF.drop('index', axis =1) 

क्या कोई और अधिक प्रभावी तरीका है?

+1

http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-: बस उन पंक्तियों को जो एक नकली सूचकांक के रूप में चिह्नित नहीं कर रहे हैं पर चयन टाइम्सरीज़ –

+1

@ पॉल: लूसियानो द्वारा आपके प्रश्न का उत्तर सिर्फ एक ही पंक्ति में – RukTech

उत्तर

26

सीधे शब्दों में: DF.groupby(DF.index).first()

+0

का उपयोग करते हैं तो भी तेज़ है। मुझे यह विधि पसंद है। धन्यवाद! @ सीटी – RukTech

+0

@ सीटी झू - अगर मैं इस विधि का उपयोग करता हूं तो यह मेरे टॉव इंडस कॉलम को एक कॉलम में जोड़ रहा है। मैं नहीं चाहता कि वह खुश हो। क्या इसके आसपास कोई रास्ता है? – liv2hak

+0

@ liv2hak, दिमाग एक न्यूनतम प्रश्न डेटासेट के साथ एक नया सवाल पूछता है? –

5

आप numpy.unique उपयोग कर सकते हैं अनन्य मानों के सूचकांक प्राप्त करने के लिए और iloc का उपयोग उन सूचकांक पाने के लिए:

>>> df 
     val 
A 0.021372 
B 1.229482 
D -1.571025 
D -0.110083 
C 0.547076 
B -0.824754 
A -1.378705 
B -0.234095 
C -1.559653 
B -0.531421 

[10 rows x 1 columns] 

>>> idx = np.unique(df.index, return_index=True)[1] 
>>> df.iloc[idx] 
     val 
A 0.021372 
B 1.229482 
C 0.547076 
D -1.571025 

[4 rows x 1 columns] 
+2

जैसा है, यह बहुत तेज़ है ..... यदि आप df.ix [idx] – baconwichsand

16

'दोहराया' विधि dataframes के लिए और श्रृंखला के लिए काम करता है।

df[~df.index.duplicated()] 
+0

हालांकि यह सभी डुप्लीकेट छोड़ देगा? –

+1

ध्यान दें कि मैंने जांच किए गए परीक्षण मामलों के लिए यह सबसे तेज़ तरीका है: http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-timeseries/34297689#34297689 आप वास्तव में स्वीकार्य उत्तर के व्यवहार को पुन: पेश कर सकते हैं: 'df [~ df.index.duplicated (keep =' first)] ' – n8yoder

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