【发布时间】:2018-06-20 15:40:54
【问题描述】:
具有这种格式数据的数据框
dfs = pd.read_csv('try.tsv', sep='\t')
dfs.head()
guide freq
g1 text1
g2 text1,text2,text1
g3 text1,text2,text3
g4 text1
g5 text1,text2,text3,text4,text5
g6 NaN
g7 text1,text2,text3,text4,text5,text6
填充NaN
dfs['freq'].fillna('no_guide', inplace=True)
dfs
guide freq
0 g1 text1
1 g2 text1,text2
2 g3 text1,text2,text3
3 g4 text1
4 g5 text1,text2,text3,text4,text5
5 g6 no_guide
6 g7 text1,text2,text3,text4,text5,text6
我需要计算文本在我尝试过的每一行中出现的次数
dfs['counts'] = dfs['freq'].str.split(',').apply(lambda x : '0' if x == 'no_guide' else len(set(x)))
我期望看到的(删除频率列之后)
guide counts
g1 1
g2 2
g3 3
g4 1
g5 5
g6 0
g5 6
我宁愿看到的
guide counts
g1 1
g2 2
g3 3
g4 1
g5 5
g6 1 #this should be g6 0
g5 6
我在我的 lambda 子句中遗漏了什么还是有其他方法可以做到这一点?
【问题讨论】:
-
您首先替换
NaN值,然后调用.str.split(),因此您确实希望条件为0 if x == ['no_guide']以获得所需的输出。 -
让我试试
-
把它贴出来作为一个答案很有效
标签: python-2.7 pandas lambda