【问题标题】:Python repeatable cycle for picking only first values equal 1Python 可重复循环仅选择等于 1 的第一个值
【发布时间】:2022-01-22 03:51:43
【问题描述】:
我的 df 索引的日期和值为 0 或 1。我需要从该数据框中过滤每个前 1。
例如:
2019-11-27 0
2019-11-29 0
2019-12-02 0
2019-12-03 1
2019-12-04 1
2019-12-05 1
2020-06-01 0
2020-06-02 0
2020-06-03 1
2020-06-04 1
2020-06-05 1
所以我想得到:
2019-12-03 1
2020-06-03 1
【问题讨论】:
标签:
python
dataframe
time-series
analytics
【解决方案1】:
假设您想要按日期升序排序的数据框的值为 1 的第一个日期,则窗口操作可能是执行此操作的最佳方法:
df['PrevValue'] = df['value'].rolling(2).agg(lambda rowset: int(rowset.iloc[0]))
这行代码向数据框中添加了一个名为“PrevValue”的额外列,其中包含前一行的值或第一行的“NaN”。
接下来,您可以按如下方式查询数据:
df_filtered = df.query("value == 1 & PrevValue == 0")
导致以下输出:
date value PrevValue
3 2019-12-03 1 0.0
8 2020-06-03 1 0.0
【解决方案2】:
我构建的功能可以满足您的要求
重要提示您应该更改可能导致问题的 col 参数
def funfun (df , col="values"):
'''
df : dataframe
col (str) : please insert the name of column that you want to scan
'''
a = []
c = df.to_dict()
for i in range (len(c[col]) -1 ) :
b=c[col][i] , c[col][i+1]
if b == (0, 1) :
a.append(df.iloc[i+1])
return a
结果