如果值连续出现,则仅保留最后一条记录

mqkwyuun  于 2022-10-23  发布在  其他
关注(0)|答案(2)|浏览(172)

如果值连续出现,则仅保留最后一条记录。
输入_df:
|日期|值|
| ------------ | ------------ |
| 2022/01/01 | 5 |
| 2022/01/03 | 4 |
| 2022/01/05 | 3 |
| 2022/01/06 | 3 |
| 2022/01/07 | 3 |
| 2022/01/08 | 4 |
| 2022/01/09 | 3 |
输出(_D):
|日期|值|
| ------------ | ------------ |
| 2022/01/01 | 5 |
| 2022/01/03 | 4 |
| 2022/01/07 | 3 |
| 2022/01/08 | 4 |
| 2022/01/09 | 3 |
--值3连续重复3个日期,因此我们只保留三个连续日期中的最新记录,如果在连续性中断之间传输了不同的值,则不要删除该记录。

xsuvu9jc

xsuvu9jc1#

您可以使用pandas.Series.diff创建一个标志,并查看列值是否连续。请参阅文档here
然后放下连续的线。

  1. # Create the dataframe
  2. df = pd.DataFrame({
  3. "Date" : ["2022/01/01", "2022/01/03", "2022/01/05", "2022/01/06", "2022/01/07", "2022/01/08", "2022/01/09"],
  4. "Value" : [5, 4, 3, 3, 3, 4, 3]
  5. })
  6. # Create a flag
  7. df['Diff'] = df['Value'].diff(periods = -1).fillna(1)
  8. df = df.loc[df['Diff'] != 0, :].drop('Diff', axis = 1)
vqlkdk9b

vqlkdk9b2#

尝试使用sql

  1. SELECT distinct date, VALUE,
  2. max(case
  3. when value=lead(value) then
  4. lead(date) else date end)
  5. Over (order by Null) from table;

相关问题