我需要一些提示进行计算。

我的数据框如下所示:

text_id     name     date                words
1           John     2018-01-01          {ocean, blue}
1           John     2018-02-01          {ocean, green}
2           Anne     2018-03-01          {table, chair}
3           Anne     2018-03-01          {hot, cold, warm}
3           Mark     2018-04-01          {hot, cold}
3           Ethan    2018-05-01          {warm, icy}
4           Paul     2018-01-01          {cat, dog, puppy}
4           John     2018-02-01          {cat}
5           Paul     2018-03-01          {cat, sheep, deer}


在文本中,text_id代表特定文本(SAME TEXT_ID = SAME TEXT)。 name列代表已编辑文本的人。 date列代表用户进行编辑的日期。 words列由用户编辑后形成文本的单词组成。

words列是一组。我需要添加一个附加列added_words,其中包含对THE SAME文本的先前编辑的设置差异。这是为了检查在同一文本中一次编辑及其连续一次之间的区别。

这里的示例输出将是:

text_id     name     date          words            added_words
1           John     2018-01-01    {ocean,blue}     {ocean, blue}
1           John     2018-02-01    {ocean,green}    {green}
2           Anne     2018-03-01    {table,chair}    {table, chair}
3           Anne     2018-03-01    {hot,cold,warm}  {hot, cold, warm}
3           Mark     2018-04-01    {hot,cold}       {}
3           Ethan    2018-05-01    {warm,icy}       {warm, icy}
4           Paul     2018-01-01    {cat,dog,puppy}  {cat, dog, puppy}
4           John     2018-02-01    {cat}            {}
5           Paul     2018-03-01    {cat,sheep,deer} {cat,sheep,deer}


请注意,基本上,仅当第i行和第i-1行的text_id相同时,added_words列包含第i行的word列和第i-1行的word列之间的设置差异,因为:只希望SAME文本(相同的text_id)之间存在差异,而不是不同的文本。

关于此的任何提示将非常有帮助。

编辑:

为了将words列变成一组,请执行以下操作:


  df ['words'] = df ['words']。str.strip('{}')。str.split(',')。apply(set)

最佳答案

使用difffillnaDiff将设置减法

df['added_words'] = df.groupby('text_id').words.diff().fillna(df.words)

In [162]: df
Out[162]:
   text_id   name        date               words         added_words
0        1   John  2018-01-01       {ocean, blue}       {ocean, blue}
1        1   John  2018-02-01      {green, ocean}             {green}
2        2   Anne  2018-03-01      {chair, table}      {chair, table}
3        3   Anne  2018-03-01   {warm, cold, hot}   {warm, cold, hot}
4        3   Mark  2018-04-01         {cold, hot}                  {}
5        3  Ethan  2018-05-01         {warm, icy}         {warm, icy}
6        4   Paul  2018-01-01   {cat, puppy, dog}   {cat, puppy, dog}
7        4   John  2018-02-01               {cat}                  {}
8        5   Paul  2018-03-01  {cat, deer, sheep}  {cat, deer, sheep}

关于python - 计算数据帧中两个连续行之间的集合差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57495578/

10-13 06:44