【问题标题】:Recover all rows based on min and max values of a column - Python Pandas根据列的最小值和最大值恢复所有行 - Python Pandas
【发布时间】:2021-02-21 15:23:27
【问题描述】:

我想提取具有特定列的最小值和最大值的所有行。

这是我的 df:

id      time            value
1       16:23:37.006155 406
2       16:23:37.320417 410
3       16:23:37.917598 415
4       16:23:51.049987 420
5       16:23:52.595148 425
6       16:27:13.880722 430
7       16:27:17.258117 435
8       16:28:31.529722 455
9       16:28:37.640527 460
10      16:28:47.782197 405
11      16:28:48.085    410

目标是创建另一个带有时间、值列的df:

  • 保存第一个值
  • 如果该值低于前一个值,则保存它和前一个值。

所以我尝试了这个:

df['BeforeDiff'] = df['value'] < df['value'].shift()

但我只有没有第一行的最小值。

换句话说,我想要每个序列的最小值和最大值,并用时间列做差异。结果必须是:

id      time            value
1       16:23:37.006155 406
9       16:28:37.640527 460
10      16:28:47.782197 405

感谢您的宝贵时间!

【问题讨论】:

  • 你的表中只有第一个值还是第一个值不同(id=1重复)?
  • 我有点不清楚你想要什么。您只是想要第一行、最大值行和最小值行吗?
  • 时间是唯一的(正常的日期和时间,但我简化了示例)并且列值的值可以重复。这是一个重复的时间序列,我需要确定最小和最大状态(值)之间的时间来计算节奏。

标签: python pandas dataframe


【解决方案1】:

假设您的数据框中的 id 是一个实际列,而不是索引:

df.loc[(df['id'] == 1)|(df.value.diff()<0)|((df.value.diff()<0).shift(-1))]

out:
    id  time            value
0   1   16:23:37.006155 406
8   9   16:28:37.640527 460
9   10  16:28:47.782197 405

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多