我有一个如下所示的数据框:
DF1 =
sID token A B C D
10 I am a f g h
10 here a g g h
10 whats a h g h
10 going a o g h
10 on a j g h
10 . a f g h
11 I am a f g h
11 foo bar a f g h
12 You are a f g h
...
列 (A-D) 与此任务无关。有没有办法向 DataFrame 添加一个计数器列来计算单词(由空格分隔)。该列应该开始计算每个 sID 的 token 数量。这意味着每次 sID 的值更改时它都会重置。
通常我只会使用 DF.groupby("sID").cumcount() 但这只会计算每个 sID 的行数。
结果应该是这样的:
DF2 =
sID token A B C D Counter
10 I am a f g h 0 1
10 here a g g h 2
10 whats a h g h 3
10 going a o g h 4
10 on a j g h 5
10 . a f g h 6
11 I am a f g h 0 1
11 foo bar a f g h 2 3
12 You are a f g h 0 1
...
请您参考如下方法:
在使用 groupby("sID").cumcount() 之前,您需要进行一些操作以保持单词所在的行,一旦拆分,它们就属于这些单词。因此,您可以像这样创建列“Counter”:
df['Counter']= (df.set_index('sID',append=True)['token']
.str.split(' ',expand=True).stack()
.groupby('sID').cumcount()
.groupby(level=0).apply(lambda x: ' '.join([str(i) for i in x])))
你得到了预期的输出
