2017-04-19 14 views
0

I次のデータフレームがあります。カウント出現

enter image description here

私は、このデータフレームを思い付く探しています: enter image description here

パイプの発生をカウントしています位置とタイプの列で区切られた文字列。

答えて

1

あなたはそれぞれの値を分割でき、 countメソッドを適用します。

enter image description here

df = pd.DataFrame.from_dict({'POSITION':['FRONT|FRONT|BACK|BACK|BACK'], 'TYPE': ['EXIT|EXIT|EXIT|WINDOW']}) 

df = df.assign(EXIT_CNTR = lambda x: x.TYPE.apply(lambda y: y.split('|').count('EXIT'))) 
df = df.assign(WINDOW_CNTR = lambda x: x.TYPE.apply(lambda y: y.split('|').count('WINDOW'))) 
df = df.assign(FRONT_CNTR = lambda x: x.POSITION.apply(lambda y: y.split('|').count('FRONT'))) 
df = df.assign(BACK_CNTR = lambda x: x.POSITION.apply(lambda y: y.split('|').count('BACK'))) 

結果以下の例を参照

1

トリックはしかし、あなたはまた、(あなたのDataFrameを仮定すると、dfと呼ばれている)名前を変更すると、それらをCONCATかもしれないcollections.Counter

In [1]: from collections import Counter 
In [2]: s = pd.Series(["AAA|BBB"]) 
In [3]: s.str.split("|").apply(Counter).apply(pd.Series) 
Out[3]:  
    AAA BBB 
0 1 1 

を使用することです:

# Counting 
positions = df["POSITION"].str.split("|").apply(Counter).apply(pd.Series) 
types = df["TYPE"].str.split("|").apply(Counter).apply(pd.Series) 

# Tidying 
positions = positions.fillna(0).add_suffix("_CNT") 
types = types.fillna(0).add_suffix("_CNT") 

# Joining 
df = pd.concat([df, positions, types], axis=1) 
関連する問題