【发布时间】:2019-08-19 12:02:13
【问题描述】:
我需要一些技巧来进行计算。
我的数据框如下所示:
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 列是一个集合。我需要添加一个附加列erased_words,其中包含THE SAME 文本上当前编辑(在当前行中)和前一个编辑(在上一行中)的设置差异。这可能意味着操作必须通过text_id进行分组。
此处的示例输出为:
text_id name date words erased_words
1 John 2018-01-01 {ocean,blue} {}
1 John 2018-02-01 {ocean,green} {blue}
2 Anne 2018-03-01 {table,chair} {}
3 Anne 2018-03-01 {hot,cold,warm} {}
3 Mark 2018-04-01 {hot,cold} {warm}
3 Ethan 2018-05-01 {warm,icy} {hot, cold}
4 Paul 2018-01-01 {cat,dog,puppy} {}
4 John 2018-02-01 {cat} {dog, puppy}
5 Paul 2018-03-01 {cat,sheep,deer} {}
请注意,基本上,erased_words 列包含i-1 行中的单词列和i 行中的单词列之间的集合差异,仅当第 i 行和第 i-1 行中的 text_id 为一样的,因为:我只希望同一文本中连续版本之间缺少的单词(相同的text_id),而不是不同的单词。
这方面的任何提示都会非常有帮助。
编辑:
为了将words 列变成一个集合,请执行以下操作:
df['words'] = df['words'].str.strip('{}').str.split(',').apply(set)
注意:
这不是一个重复的问题,我做了一个类似的问题,但请注意,我想做的计算完全是另一个问题。
请,我仍然没有得到正确的答案。非常感谢任何帮助
【问题讨论】:
-
您能否提供代码来重新创建您提供的数据框示例?需要始终复制和打印表格,删除空格并添加引号和所有内容
标签: python pandas set difference