Menghapus duplikat untuk satu baris dengan duplikat dalam satu kolom data dinamis

Saya mencoba menghapus duplikat untuk Kolom D untuk data dinamis tanpa header atau fitur pengidentifikasi. Saya mencoba menghapus semua baris yang terdapat duplikat untuk Kolom D. Saya mengonversi excel menjadi kerangka data, menghapus duplikat, dan kemudian memasukkannya kembali ke excel. Namun saya tetap mendapatkan berbagai macam kesalahan atau tidak ada duplikat yang dihapus. Saya berasal dari latar belakang VBA tetapi kami bermigrasi ke Python

Mencoba:

df.drop_duplicates(["C"])

df = pd.DataFrame({"C"})
df.groupby(["C"]).filter(lambda df:df.shape[0] == 1)

As well an assortment of other variations.  I was able to do this in VBA with one line.  Any ideas why this keeps causing this issue.


\\ import pandas as pd
df = pd.DataFrame({"C"]})
df.drop_duplicates(subset=[''C'], keep=False)


DG=df.groupby([''C'])   
print pd.concat([DG.get_group(item) for item, value in DG.groups.items() if len(value)==1])

Saya bisa melakukan ini di VBA dengan satu baris. Adakah alasan mengapa hal ini terus menyebabkan masalah ini.

Kode itu sendiri Templat-

df = pd.read_excel("C:/wadwa.xlsx", sheetname=0)
columns_to_drop = ['d.1']
#columns_to_drop = ['d.1', 'b.1', 'e.1', 'f.1', 'g.1']


import pandas as pd


Df = df[[col for col in df.columns if col not in columns_to_drop]]
print(df)

writer = pd.ExcelWriter('C:/dadwa/dwad.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
print(df)

Kode:

import pandas as pd

df = pd.read_excel("C:/Users/Documents/Book1.xlsx", sheetname=0)

import pandas as pd
df = df.drop_duplicates(subset=[df.columns[3]], keep=False)

writer = pd.ExcelWriter('C:/Users//Documents/Book2.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
print(df)

person Community    schedule 08.11.2017    source sumber
comment
tidak perlu menugaskan kembali df = df.drop_duplicates(subset=['C'], keep=False)   -  person jezrael    schedule 08.11.2017
comment
@jezrael Benar-benar tidak menyukai kode itu. Kesalahan besar saat saya memasukkannya   -  person    schedule 08.11.2017


Jawaban (1)


Saya pikir Anda perlu menetapkan kembali dan memilih kolom ke-4 berdasarkan posisi:

df = df.drop_duplicates(subset=[df.columns[3]], keep=False)
person jezrael    schedule 08.11.2017
comment
Kumpulan data tetap tidak berubah. Saya akan memposting gambarnya. - person ; 08.11.2017
comment
Apakah data bersifat rahasia? Jika tidak, bisakah Anda mengirimkan file Anda ke email saya di profil saya? Karena sepertinya ada masalah yang bergantung pada data. Terima kasih. - person jezrael; 08.11.2017
comment
Saya telah mempertanyakan kode alih-alih tautan eksternal yang kemungkinan besar akan rusak. Saya sering melihat orang lain melakukan hal ini, tetapi cukuplah untuk mengatakan bahwa saya tidak boleh meniru kebiasaan buruk orang lain. - person ; 08.11.2017
comment
Jika nilai tidak dihapus, ada masalah pada data. Jadi periksa spasi, atau perbedaan lainnya. Sulit untuk mengidentifikasi masalah Anda jika saya tidak memiliki data Anda :( - person jezrael; 08.11.2017
comment
Saya menggunakan windows 10 64 bit dan kode saya ada di akhir pertanyaan. Ia memiliki teks di excel, mengubahnya menjadi kerangka data, penghapusan duplikat dan kemudian menulisnya ke buku kerja excel terpisah. Saya akan mencetak untuk melihat apakah ada kesalahan di sana. Saya rasa ini tidak menghapus duplikat sama sekali menurut cetakan. - person ; 08.11.2017
comment
Saya melihatnya sekarang. kolom pertama tidak dihitung, karena indeks, jadi perlu df = df.drop_duplicates(subset=[df.columns[2]], keep=False) - centang kolom ke-3. - person jezrael; 08.11.2017
comment
Saya telah mengujinya ulang beberapa kali dan mendapatkan hasil yang aneh. Reset semuanya dan output tidak berubah. - person ; 08.11.2017
comment
Ya, itu adalah keluaran yang benar. Karena parameter keep=False ir menghapus kedua baris dengan nilai D. - person jezrael; 08.11.2017
comment
Baris pertama adalah kolom dan kolom pertama disebut indeks, jadi tidak tersentuh. - person jezrael; 08.11.2017
comment
imgur.com/a/OIzqD Ini cenderung menghapus kedua nilai e di Kolom B. Ini juga telah membuat kesenjangan. - person ; 08.11.2017
comment
Hmmm, alasannya harus ada spasi seperti df = pd.DataFrame({'b':['e','e',' ', ''],'c':['e','f','g', 'h']}), periksa paling lambat (df.drop_duplicates('b', keep=False)) - person jezrael; 08.11.2017
comment
Output ideal saya adalah menghapus duplikat Kolom C dan baris data di sampingnya juga dihapus sehingga datanya bagus, rapi, dan dapat digunakan. Ini tidak berlaku seperti yang saya inginkan. - person ; 08.11.2017
comment
Seluruh kolom telah dihapus. Ini memang sangat aneh. - person ; 08.11.2017
comment
Ia hanya memeriksa kolom C lalu untuk fungsi drop_duplicates kolom lain tidak relevan, jadi sepertinya perlu solusi rumit, tidak hanya drop_duplikat - person jezrael; 08.11.2017
comment
Sesuatu seperti: df.append([df_try]*5,ignore_index=True) untuk menambahkan data untuk kolom C ke atas Baris sehingga tidak ada celah serta a.loc[a.shift(-1) != a] untuk dihapus baris duplikat yang berdekatan dihapus untuk kolom C. Sejauh ini tidak berfungsi tetapi saya tahu ini bisa dilakukan. - person ; 08.11.2017
comment
Tidak yakin jika mengerti, bisakah Anda mengubah df = pd.DataFrame({'b':['e','e',' ', ''],'c':['e','f','g', 'h']}) apa yang Anda bicarakan? Dan bisakah Anda menambahkan keluaran yang diinginkan? - person jezrael; 08.11.2017
comment
Saya bisa melakukan yang lebih baik, saya bisa menunjukkan kepada Anda apa yang saya lihat- ibb.co/jEQjSb - person ; 08.11.2017
comment
Jadi apa keluaran yang diinginkan? Tidak yakin apakah mengerti. - person jezrael; 08.11.2017
comment
Secara umum, inilah yang ingin saya capai - ibb.co/f08Dnb . Tujuannya untuk menghilangkan duplikat pada Kolom D + Baris sehingga terlihat seperti pada gambar. - person ; 08.11.2017
comment
Jadi hanya perlu nilai duplikat terlebih dahulu? Maka hanya perlu (df.drop_duplicates('b', keep='first')) atau (df.drop_duplicates('b')) yang sama. Jika perlu simpan nilai terakhir (df.drop_duplicates('b', keep='last')) - person jezrael; 08.11.2017
comment
Datanya cukup besar dan banyak duplikat di Kolom itu. Jadi saya ingin menghapus semua duplikat di Kolom D dan baris yang berdekatan seperti yang terlihat pada gambar. - person ; 08.11.2017
comment
Ya, jadi df = df.drop_duplicates(subset=[df.columns[2]]) seharusnya berfungsi dengan sempurna. - person jezrael; 08.11.2017
comment
Saya tertarik pada Kolom 4 atau D dalam hal ini. Tampaknya hal itu benar. Saya tidak yakin mengapa itu untuk Kolom 3 bukan? Saya akan mencobanya dengan data lain dan melihatnya. - person ; 08.11.2017
comment
Ternyata excel yang baru dibuat pun bisa dengan mudah rusak. Saya kira itu cenderung terjadi ketika Anda menjalankan banyak kode python yang berbeda. Terima kasih atas seluruh bantuan Anda. Seharusnya aku mengirimimu berkasnya lebih awal, tapi semuanya berakhir dengan baik. - person ; 08.11.2017
comment
Tampaknya menghapus semua duplikat, simpan 2. Bertanya-tanya mengapa demikian. - person ; 09.11.2017