2017-09-08 2 views
1

Ich versuche, die meisten dominant/der häufigste Wert einer Spalte zu bekommen, also habe ich versucht, den folgenden Code,Pandas bekommen den dominanteste Wert in der Spalte

df['currency'].value_counts(normalize=True) 

, die mir gibt, z.B.

USD 0.800000 
CAD 0.100000 
EUR 0.050000 
GBP 0.050000 

nun die Rand Fälle sind wie

USD 0.500000 
CAD 0.500000 

oder

USD 0.333333 
CAD 0.333333 
CNY 0.333333 

oder

USD 0.400000 
CAD 0.400000 
CNY 0.100000 
EUR 0.100000 

und so weiter, wo die Frequenzen selbst unter allen Werten oder einem Teil der Werte.

Jetzt versuche ich solche Kanten Fälle zu erkennen, also was ist der beste Weg, das zu tun?

Mit anderen Worten, ich versuche, die dominanteste Frequenz eines Wertes in der Reihe/Spalte zu finden, in der df['currency'].value_counts().max() nicht unbedingt die häufigste Frequenz gibt, da die Werte von df['currency'].value_counts() alle gleich sein könnten. Daher gibt data.df['currency'].value_counts().idxmax() nicht unbedingt den Index/Spaltenwert mit der höchsten Häufigkeit in der Spalte an.

+0

Sie müssen 's = df [col] .value_counts() '; 's [s == s.max()]'? – Zero

+1

Haben Sie erwogen, die Methode [Series.mode()] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mode.html) zu verwenden? – MaxU

Antwort

3

Demo:

In [104]: df 
Out[104]: 
    currency 
0  USD 
1  USD 
2  EUR 
3  EUR 
4  CAD 

In [105]: df.currency.mode() 
Out[105]: 
0 EUR 
1 USD 
dtype: object 

In [106]: len(df.currency.mode()) > 1 
Out[106]: True 

jetzt lasst uns "reparieren" unsere DF - durch eine weitere Zeile mit USD Währung hinzufügen, so dass es keine "Kante" Fälle mehr:

In [107]: df.loc[len(df)] = ['USD'] 

In [108]: df 
Out[108]: 
    currency 
0  USD 
1  USD 
2  EUR 
3  EUR 
4  CAD 
5  USD 

In [109]: len(df.currency.mode()) > 1 
Out[109]: False 

In [110]: df.currency.mode() 
Out[110]: 
0 USD 
dtype: object 
+0

'df.loc [len (df)] = ['USD']' gab mir 'ValueError: kann keine Zeile mit nicht übereinstimmenden Spalten setzen ' – daiyue

+0

@daiyue, das war nur eine Demo - Sie sollten keine Zeilen zu Ihrem DF hinzufügen ... Ich wollte nur die verschiedenen Ausgaben von 'df.currency.mode()' zeigen, wenn es keine "Kanten" -Fälle gibt ... – MaxU

Verwandte Themen