Ik probeer een nieuwe dataset te krijgen of de waarde van de huidige datasetkolommen te wijzigen in hun unieke waarden.
Hier is een voorbeeld van wat ik probeer te krijgen:
A B
-----
0| 1 1
1| 2 5
2| 1 5
3| 7 9
4| 7 9
5| 8 9
Wanted Result Not Wanted Result
A B A B
----- -----
0| 1 1 0| 1 1
1| 2 5 1| 2 5
2| 7 9 2|
3| 8 3| 7 9
4|
5| 8
Ik geef niet echt om de index, maar het lijkt het probleem te zijn.
Mijn code tot nu toe is vrij eenvoudig, ik heb 2 benaderingen geprobeerd, 1 met een nieuw dataFrame en een zonder.
#With New DataFrame
def UniqueResults(dataframe):
df = pd.DataFrame()
for col in dataframe:
S=pd.Series(dataframe[col].unique())
df[col]=S.values
return df
#Without new DataFrame
def UniqueResults(dataframe):
for col in dataframe:
dataframe[col]=dataframe[col].unique()
return dataframe
Ik krijg beide keren de foutmelding “Lengte van waarden komt niet overeen met lengte van index”.
Antwoord 1, autoriteit 100%
De fout treedt op wanneer u probeert een lijst met numpy-arrays van verschillende lengte toe te wijzen aan een dataframe, en deze kan als volgt worden gereproduceerd:
Een dataframe van vier rijen:
df = pd.DataFrame({'A': [1,2,3,4]})
Probeer er nu een lijst/array van twee elementen aan toe te wijzen:
df['B'] = [3,4] # or df['B'] = np.array([3,4])
Beide fouten eruit:
ValueError: lengte van waarden komt niet overeen met lengte van index
Omdat het dataframe vier rijen heeft, maar de lijst en array slechts twee elementen.
Omzeilingsoplossing(voorzichtig gebruiken): converteer de lijst/array naar een panda-serie, en wanneer u de opdracht uitvoert, wordt de ontbrekende index in de serie gevuld met NaN:
df['B'] = pd.Series([3,4])
df
# A B
#0 1 3.0
#1 2 4.0
#2 3 NaN # NaN because the value at index 2 and 3 doesn't exist in the Series
#3 4 NaN
Voor uw specifieke probleem, als u niet geïnteresseerd bent in de index of de overeenkomst van waarden tussen kolommen, kunt u de index voor elke kolom opnieuw instellen nadat u de duplicaten hebt verwijderd:
df.apply(lambda col: col.drop_duplicates().reset_index(drop=True))
# A B
#0 1 1.0
#1 2 5.0
#2 7 9.0
#3 8 NaN