在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;如果一个元素相对于前一个子集不再存在,则为撤回)