2017-05-10 3 views
1

Ich möchte wissen, wie viele Zellen in jeder Zeile Zeichenfolgen mit einem bestimmten Zeichen enthalten. Zum Beispiel:Ermitteln der Anzahl der Zellen mit Zeichenfolgen, die ein bestimmtes Zeichen enthalten

d = {'a':[1,2,'abc','ace'],'b':['aa','bb','cc',5],'c':['zzz','byy','xxx','wwb']} 
df = pd.DataFrame(d, index=['m','n','o','p']) 
df 

    a b c 
m 1 aa zzz 
n 2 bb byy 
o abc cc xxx 
p ace 5 wwb 

Ich mag die Anzahl der Zellen in jeder Zeile wissen, dass ein "b" enthalten:

a b c Count 
m 1 aa zzz 0 
n 2 bb byy 2 
o abc cc xxx 1 
p ace 5 wwb 1 

str.contains Arbeiten an der Serie, nicht Datenrahmen. Ich konnte durch den Index Schritt und etwas tun, wie

df.loc['m','Count'] = df.loc['m'].str.contains('b').sum() 

aber es scheint, wie es sollte eine viel einfachere Lösung, die ich jetzt bin fehlt.

Antwort

2

UPDATE:

In [60]: df.apply(lambda x: x.str.contains('b')).sum(1) 
Out[60]: 
m 0.0 
n 2.0 
o 1.0 
p 1.0 
dtype: float64 

oder

In [57]: df.apply(lambda x: x.str.contains('b').sum(), axis=1) 
Out[57]: 
m 0 
n 2 
o 1 
p 1 
dtype: int64 

zu zählen, wie viele b Jede Reihe hat:

In [50]: df.astype(str).sum(axis=1).str.count('b') 
Out[50]: 
m 0 
n 3 
o 1 
p 1 
dtype: int64 
1

Eine weitere Lösung verwendet applymap:

df['Count'] = np.sum(df.applymap(lambda x: 'b' in str(x)),1) 

df 
Out[99]: 
    a b c Count 
m 1 aa zzz  0 
n 2 bb byy  2 
o abc cc xxx  1 
p ace 5 wwb  1 
Verwandte Themen