我的数据框如下:
col_1
0 A
1 A:C:D
2 A:B:C:D:E
3 B:D
我正在尝试计算每个':'以获得:
col_1 count
0 A 0
1 A:C:D 2
2 A:B:C:D:E 4
3 B:D 1
我尝试过应用函数无效:
def count_fx(df):
return df.str.contains(':').sum()
df['count'] = df['col_1'].apply(count_fx)
此外,
df['count'] = df['col_1'].apply(lambda x: (x.str.contains(':')).sum(), axis=1)
答案 0 :(得分:3)
您需要使用str.count
方法:
df['count'] = df[0].apply(lambda x: x.count(':'))
0 count
0 A:C:D 2
1 A:B:C:D:E 4
2 B:D 1
答案 1 :(得分:2)
这里使用apply()
的方式会导致传入每个元素。也就是说,DataFrame 不是传入的内容。所以你只需要将你的函数改为
def count_fx(s):
return s.count(':')
然后你可以使用你拥有的东西:
In [11]: df['count'] = df['col_1'].apply(count_fx)
In [12]: df
Out[12]:
col_1 count
0 A 0
1 A:C:D 2
2 A:B:C:D:E 4
3 B:D 1