我需要一些提示进行计算。
我的数据框如下所示:
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)
最佳答案
使用diff
和fillna
。 Diff
将设置减法
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/