Python跟踪多列值的变化

Posted

技术标签:

【中文标题】Python跟踪多列值的变化【英文标题】:Python Tracking change in values across multiple columns 【发布时间】:2022-01-20 13:00:41 【问题描述】:

我有一个特定的场景,我有一个包含历史记录的数据集,如果某个 ID 的最新条目与最后一个条目不同,我需要能够标记。

例如,这里是启动器 df 的示例快照:

ID A B C Close Date
111 0 1 0 10-1-2021
111 0 1 0 11-1-2021
111 1 1 1 12-1-2021
222 0 0 0 9-1-2021
222 0 0 0 10-1-2021
333 0 0 0 8-1-2021
333 0 1 1 12-1-2021

我想要的样子:

ID A B C Close Date
111 1 1 1 12-1-2021
333 0 1 1 12-1-2021

如果没有更改的条目被删除,并且任何给定列中具有某种类型更改的条目不同,并且最近的记录根据最近的日期保留。

我试过这段代码:

df = df[df[['ID', 'A','B', 'C', '截止日期']].duplicated() == False]

但意识到这并不能完全捕捉到这种情况的所有情况。如果每个 ID 的最新条目与以前的条目不同,是否有更简单的方法来比较?

编辑:

如果表中包含整数列和字符串列怎么办?

ID A B C D Close Date
111 0 1 0 abcd 10-1-2021
111 0 1 0 efgh 11-1-2021
111 1 1 1 ijkl 12-1-2021
222 0 0 0 mnop 9-1-2021
222 0 0 0 qrst 10-1-2021
333 0 0 0 uvwx 8-1-2021
333 0 1 1 yzzz 12-1-2021

那么我如何才能检查每个 ID 的最后两个条目是否相同?如果是,则删除该 ID 的所有实例。

【问题讨论】:

" 如果某个 ID 的最新条目与最后一个条目不同。" ?你能重述或澄清一下吗? 当然可以。我只是想比较最后一个条目的 ID 是否有变化。假设每个日期都是一个新的月份。因此,如果一个人(ID)从 10 月开始的信息与 11 月相同,这没有变化,我们删除了这条记录。如果此人 11 月的数据不同,这是我想跟踪并保留在 df.xml 中的更改。如果我能澄清更多,请告诉我。 您能否更新您的数据框示例以包含Close Date?这个例子看起来有点不直观。您不想从重复的集合中保留至少一条记录吗? (如 111-0,1,0) 对于我的具体情况,我有一个报告有逻辑表明更新中是否不存在记录,那么就没有变化。在之前的报告中有记录,这就是为什么在这种情况下无关紧要。我更新了关闭日期 @ek11222 牢记这一点,我已经尝试了一个可行的解决方案。看看它是否对你的整个数据集都有效 【参考方案1】:

我认为这会为您提供所需的输出以及原始行号。由于您没有提供 D 列,因此我使用了列列表进行比较。如果尚未完成,可能有助于按日期排序。可能会错过一些边缘情况,我认为如果只有一个 ID 条目,如果您可以使用有问题的行更新示例,我可以再看一下。

df = pd.DataFrame(
[
    [111, 0,1,0],
    [111, 0,1,0], 
    [111, 1,1,1], 
    [222, 0,0,0], 
    [222, 0,0,0], 
    [333, 0,0,0], 
    [333, 0,1,1] 
], 
columns=["ID", "A","B","C"])

cols_to_check = ["A","B", "C"]
res = df.groupby(
    'ID', as_index=False
  ).apply(
    lambda x: x[1:][(x[cols_to_check][1:] != x[cols_to_check].shift().dropna()).any(axis=1)])

【讨论】:

感谢您的解决方案,这确实适用于数字列并且非常彻底。如果列中有混合的数据类型会怎样?例如,A 列的每一行都包含字符串,而所有其他列保持不变。 好吧,我花了一点时间来准确理解,但正如我现在所看到的那样,任何 id 的第一行都会被丢弃。我已经更新了答案,试一试它应该适用于所有情况。如果您不想要多级数据框,请删除索引。

以上是关于Python跟踪多列值的变化的主要内容,如果未能解决你的问题,请参考以下文章

python 跟踪数字变化的类。

返回 PostgreSQL 中更新值的变化

如何在 python 的帮助下跟踪和显示 HDF5 文件中所做的不断变化

Mysql查询以查找一段时间内值的百分比变化

如何使用 ctypes 在 python 中查看指针值的变化

如何计算 R 中多列的组内百分比变化?