2017-04-19 42 views

回答

1

你可能分裂的每個值和然後應用計數方法。參見在實施例下面

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'))) 

結果

enter image description here

1

的技巧是使用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 

雖然,你可能還需要重命名和Concat的這些(假設你的DataFrame被稱爲df):

# 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)