Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中比较时间序列中的字符串元素_Python_String_Dataframe_Set_Comparison - Fatal编程技术网

在Python中比较时间序列中的字符串元素

在Python中比较时间序列中的字符串元素,python,string,dataframe,set,comparison,Python,String,Dataframe,Set,Comparison,我有以下数据集: date | name 2018-06-01 | John 2018-06-01 | Jake 2018-06-01 | Allan 2018-07-01 | Kate 2018-07-01 | Jake 2018-07-01 | Joe (日期设置为索引) 我想要实现的是: -对于每个期间组(例如一个月) -识别引入或删除的元素(名称) 因此,正如我想象的那样,生成的数据集如下所示: date | action | name 2018-06-01 |

我有以下数据集:

date       | name
2018-06-01 | John
2018-06-01 | Jake
2018-06-01 | Allan
2018-07-01 | Kate
2018-07-01 | Jake
2018-07-01 | Joe
(日期设置为索引)

我想要实现的是: -对于每个期间组(例如一个月) -识别引入或删除的元素(名称)

因此,正如我想象的那样,生成的数据集如下所示:

date       | action | name
2018-06-01 | Joiner | John
2018-06-01 | Joiner | Jake
2018-06-01 | Joiner | Allan
2018-07-01 | Joiner | Kate
2018-07-01 | Joiner | Joe
2018-07-01 | Withdrawal | John
2018-07-01 | Withdrawal | Allan
我正在使用熊猫数据帧。 我认为我需要做的半逻辑解释是:

set = [] # resulting data set
for date, new_df in df.groupby(level=0): # breaking down the original set based the data into subsets
    for i in new_df: # iterating through each subset
        if (i in new_df-1): # comparing elements of each subset to the previous one
           set_element = {definition of a "joiner element"} 
           set.append(set_element) # adding an element to a resulting data set
        else:
            if (i not in new_df-1):
               set_element = {definition of a "withdrawal element"}
            else:
                pass
目前我正在

"unsupported operand type(s) for -: 'str' and 'int'" 

所以有些东西告诉我我不能用集合来比较字符串。。。或者我在比较错误的元素

您的问题令人困惑,具体表现在:

  • 您到底想做什么,将第一个表转换为第二个表的逻辑是什么
  • 数据帧中的值类型是什么(并且,说明您正在使用数据帧:)。我假设它们是字符串
  • {提取元素的定义}

在任何情况下,我都假设数据帧中的值是字符串。当您写入(
new_df-1
)时,它会尝试从数据帧中的每个值中减去1。如果数据帧包含像
int
double
这样的数字(那么,结果将是一个数据帧,其中所有值都减去1),但不能从数据集中的
字符串
值中“减去1”,则这可能会起作用

我想我可以自己解决这个问题:

b = []
c = []
result = []
row = []
for date, new_df in df.groupby(level=0):
    a = set(new_df['name']).difference(b)
    for i in a:
        row = ({'date':date, 'action':'Joiner', 'name':i})
        result.append(row)  
    c = set(b).difference(set(new_df['name']))
    for i in c:
        row = ({'date':date, 'action':'Withdrawal', 'name':i})
        result.append(row)
    b = set(new_df['name'])

res_df = pd.DataFrame(data=result).set_index('date')

始终用小写字母初始化变量。这是标准的。谢谢你,彼得!这是有道理的。我已经更正了我原来的帖子,如果有帮助请告诉我。我将尝试自己的进步,到时候,我会随时通知你的!另外,为了回答您的问题:-集合中的值是名称-字符串;-一个新集合的元素有两种类型(joiner-如果一个元素是相对于前一个子集引入的,则为joiner;如果一个元素相对于前一个子集不再存在,则为撤回)