Skip to main content
 首页 » 编程设计

python之计算 DataFrame 中列中的单词

2025年05月04日13pengyingh

我有一个如下所示的数据框:

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

你得到了预期的输出