2017-10-24 1 views
0
names Class Category label 
ram  A  Red  one 
ravi A  Red  two 
gopal B  Green  three 
Sri  C  Red  four  

my_list1=["Category"] 
my_list2=["Class"] 

I need to get the combination counts between these two columns. 

Ich versuche, die Kombination einiger ausgewählter Spalten zu erhalten. my_list2 hat sogar mehr als eins.Analysieren eines Datenrahmens basierend auf mehreren Bedingungen

I tried, 
df[mylist1].value_counts() 

Es funktioniert gut für eine Sinigle-Spalte. Aber ich will in my_list2 für mehrere Spalte tun, basierend auf my_list1

Mein Wunsch ausgegeben werden soll,

output_df, 
Value  Counts 
Red.A  2 
Red.C  1 
Green.B 1 
+0

Da wir nicht wissen, welche Daten in Datenrahmen sind, ist es sehr schwer zu wissen, wie Ihr Problem zu lösen. Als ein Tipp könnten Sie versuchen, zip zu verwenden, um die beiden Serien zusammenzufügen. Bitte geben Sie Beispieldaten mit der Ausgabe –

+0

bearbeitet die Frage, überprüfen Sie bitte – pyd

+0

Können Sie eine andere Klasse und gewünschte Ausgabe hinzufügen? – jezrael

Antwort

1

Ich glaube, Sie beide Listen beitreten müssen zuerst, dann erstellen Series und letzte value_counts:

print (df) 
    names Class Category label Class1 
0 ram  A  Red one  E 
1 ravi  A  Red two  G 
2 gopal  B Green three  B 

my_list1=["Category"] 
my_list2=["Class", "Class1"] 


df = df[my_list1 + my_list2].apply('.'.join, axis=1).value_counts() 
print (df) 
Red.A.E  1 
Red.A.G  1 
Green.B.B 1 
dtype: int64 

Detail:

print (df[my_list1 + my_list2]) 
    Category Class Class1 
0  Red  A  E 
1  Red  A  G 
2 Green  B  B 

print (df[my_list1 + my_list2].apply('.'.join, axis=1)) 
0  Red.A.E 
1  Red.A.G 
2 Green.B.B 
dtype: object 
+0

Danke @Jezrael – pyd

1

Sieverwenden könnenwie

In [5410]: my_list1 = ["Category"] 
     ...: my_list2 = ["Class", "Class1"] 

In [5411]: df[my_list1+my_list2].apply(lambda x: x.str.cat(sep='.'), axis=1).value_counts() 
Out[5411]: 
Green.B.B 1 
Red.A.E  1 
Red.A.G  1 
dtype: int64 

Auch

In [5516]: pd.Series('.'.join(x) for x in df[my_list1 + my_list2].values).value_counts() 
Out[5516]: 
Green.B.B 1 
Red.A.E  1 
Red.A.G  1 
dtype: int64 

Or 

In [5517]: pd.Series(map('.'.join, df[my_list1 + my_list2].values)).value_counts() 
Out[5517]: 
Green.B.B 1 
Red.A.E  1 
Red.A.G  1 
dtype: int64 
+0

Danke @Zero – pyd

+0

und, Update hinzugefügt – Zero

Verwandte Themen