繁体   English   中英

如何从带时间戳的熊猫数据框中删除未更改的值?

[英]How to remove unchanged values from a timestamped pandas dataframe?

所以我有以下熊猫数据框,按时间戳升序排序:

Timestamp,Point,Value
2019-09-01,A,1
2019-09-01,B,2
2019-09-02,A,1
2019-09-02,B,2
2019-09-03,A,3
2019-09-03,B,4
2019-09-04,A,3
2019-09-04,B,4
2019-09-05,A,1
2019-09-05,B,2

该数据帧包含对不同时刻不同“点”值的读取。 在此示例中,A 和 B 每 1 天有一次读数,但其中一些值与之前的读数相同。

我需要应用一个转换,该转换将只留下 Value 列与同一点的先前读数发生变化的行。

|Timestamp |Point|Value|
|----------|-----|-----|
|2019-09-01|A    |1    | // A = 1
|2019-09-01|B    |2    | // B = 2 
|2019-09-02|A    |1    | // A unchanged, should be removed
|2019-09-02|B    |2    | // B unchanged, should be removed
|2019-09-03|A    |3    | // A = 3
|2019-09-03|B    |4    | // B = 4
|2019-09-04|A    |3    | // A unchanged, should be removed
|2019-09-04|B    |4    | // B unchanged, should be removed
|2019-09-05|A    |1    | // A = 1
|2019-09-05|B    |2    | // B = 2

在这个简化的示例中,我想要获得如下所示的数据帧。 仅包括与同一点的先前读数不同的值。

|Timestamp |Point|Value|
|----------|-----|-----|
|2019-09-01|A    |1    |
|2019-09-01|B    |2    |
|2019-09-03|A    |3    |
|2019-09-03|B    |4    |
|2019-09-05|A    |1    |
|2019-09-05|B    |2    |

您可以重塑数据框以将唯一的时间戳记作为行,将点作为列,然后检查是否有更改,否则分配 nan 和stack()

m = df.set_index(['Timestamp','Point']).unstack().where(lambda x:
                           x.ne(x.shift())).stack().reset_index()

或者分成两行:

m = df.set_index(['Timestamp','Point']).unstack()
m = m.where(m.ne(m.shift())).stack().reset_index()

print(m) 

    Timestamp Point  Value
0  2019-09-01     A    1.0
1  2019-09-01     B    2.0
2  2019-09-03     A    3.0
3  2019-09-03     B    4.0
4  2019-09-05     A    1.0
5  2019-09-05     B    2.0

您可以尝试布尔索引,首先按Timestamp 、 groupby Point排序并检查Value diff (连续两行之间的diff )不等于0

df[df.sort_values('Timestamp').groupby('Point')['Value'].diff().ne(0)]

[出去]

   Timestamp Point  Value
0 2019-09-01     A      1
1 2019-09-01     B      2
4 2019-09-03     A      3
5 2019-09-03     B      4
8 2019-09-05     A      1
9 2019-09-05     B      2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM