Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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_Pandas - Fatal编程技术网

Python 跟踪随时间顺序数据移动的有效方法

Python 跟踪随时间顺序数据移动的有效方法,python,pandas,Python,Pandas,我的数据框架中有一些有序数据列,我想跟踪这些类别在层次结构中随时间的推移是如何上升还是下降的 例如,如果我的数据帧看起来像: Date Animal OrdinalCategory Mar A Good Mar B Worse Jun A Bad Jun B Worse Jun C Bad Jun D Bad Sep B Bad Sep D Wors

我的数据框架中有一些有序数据列,我想跟踪这些类别在层次结构中随时间的推移是如何上升还是下降的

例如,如果我的数据帧看起来像:

Date  Animal  OrdinalCategory
Mar     A      Good
Mar     B      Worse
Jun     A      Bad
Jun     B      Worse
Jun     C      Bad
Jun     D      Bad
Sep     B      Bad
Sep     D      Worse
我想创建两个新的列,以表明该动物是新的条目还是在随后的季度退出

同样,我想跟踪进展情况,并指出该类别是否有所改善或恶化。 因此,我的新df看起来像:

Date  Animal  OrdinalCategory   EntryExit              Progress
Mar     A      Good            
Mar     B      Worse
Jun     A      Bad             Gone in next            Down from previous
Jun     B      Worse
Jun     C      Bad             New&Gone in next
Jun     D      Bad             New
Sep     B      Bad                                     Up from Previous
Sep     D      Worse                                   Down from Previous
你能就实现这一目标的最有效方式提出建议吗


我以前做过的非常繁琐的方法是比较每个字符串(使用shift函数)和np.where子句来填充新列。但我发现这显然是低效的。

用一种稍微不同的方式处理这个问题

ordered_categpry = ['NA', 'Good', 'Bad', 'Worse']
df.OrdinalCategory.astype("category",
  ordered=True,
  categories=ordered_categpry
).cat.codes
对于出入口概率,创建了两列来指示动物何时首先进入,何时在数据中最后出现

df['first_occured']=df['Animal'].map(df[df.OrdinalCategory!="NA"].drop_duplicates(['Animal'],keep='first').set_index(['Animal'])['Date'])


df['last_occured']=df['Animal'].map(df[df.OrdinalCategory!="NA"].drop_duplicates(['Animal'],keep='last').set_index(['Animal'])['Date'])

@jezrael你能帮个忙吗:)耶,我明白了,但真的很复杂…似乎有一些循环解决方案是必要的,但因为我对循环不感兴趣,所以我不寻找解决方案是的,我也不喜欢循环。。也许需要将问题分解成多个部分..嗯,我只是一个业余程序员:)