【问题标题】:Pandas: How to return the rows where col value is greater than 'x' in rolling windowPandas:如何在滚动窗口中返回 col 值大于“x”的行
【发布时间】:2019-12-17 09:18:54
【问题描述】:

我有一个很大的 df,我正在尝试查找特定列中的值高于给定数字但在 3 行的窗口内的所有行,并且只返回给定数字上具有最高值的行。

A    B    C    D    E
1    5    9    10   15
2    4    7    12   16
3    3    5    10   18
4    2    3    15   17
5    1    1    10   14
6    5    9    17   13
7    4    7    10   14
8    3    5    19   19
9    2    3    10   18
10   4    7    5   14
11   3    5    6   19
12   2    3    7   18

如果我想对上面的 D 列示例执行此操作,其中值必须大于 11,则输出将为。

A    B    C    D    E
2    4    7    12   16
6    5    9    17   13
8    3    5    19   19.

解决此问题的最佳方法是什么?

我试过了: df.rolling(3,win_type=None, on='D') 但找不到包含大于条件的方法。

感谢任何帮助。谢谢!

【问题讨论】:

  • 这能回答你的问题吗? how do I calculate a rolling idxmax
  • 不完全是,我不想返回每个窗口中的最大值,因为有时值会低于我要设置的最小值。
  • 我认为任何 pandas 方法都无济于事,您应该使用简单的 for 循环解析。如果你想要,我可以帮忙。

标签: python pandas dataframe


【解决方案1】:

已编辑: 试试这个:

threshold = 11
window = 3
df['r'] = np.floor(df.index / window)
print(df.groupby('r').apply(lambda x : (x.loc[x['D'] == x['D'].max() ,:]) if x['D'].max() > threshold else None))

您可以在使用后删除列 'r'。

输出:

      A  B  C   D   E    r
r                          
0.0 1  2  4  7  12  16  0.0
1.0 5  6  5  9  17  13  1.0
2.0 7  8  3  5  19  19  2.0

【讨论】:

  • 这成功了!虽然,我不是很明白。谢谢!
  • 为想要的窗口做了组,想要的组过滤通过groupbylambda实现
猜你喜欢
  • 2021-03-13
  • 2018-05-08
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多