我在包含 1000 多行的数据框中有两列。A 列可以取值 X、Y、None。B 列包含从 50 到 100 的随机数。
每次在 A 列中出现非“无”事件时,都将其视为发生事件 4。因此,A 列中先前的非 None 事件将是发生 3,之前的事件将是发生 2,之前的事件将是发生 1。我想在发生4和发生3之间找到B列的最小值,并检查它是否大于发生2和发生1之间的B列最小值。结果可以作为“YES”或“NO”存储在数据框中的新列中。
例如,我需要找到 ROWNUM 14 和 ROWNUM 11 之间的 B 列的最小值,并将其与 ROWNUM 6 和 ROWNUM 3 之间的 B 列的最小值进行比较。接下来我需要比较 ROWNUM 22 和 ROWNUM 14 之间的最小值并将其与 ROWNUM 11 和 ROWNNUM 6 之间的最小值进行比较。
更新:
import numpy as np
import pandas as pd
df = pd.DataFrame([[0, 0]]*100, columns=list('AB'), index=range(1, 101))
df.loc[[3, 6, 11, 14, 22, 26, 38, 51, 64, 69, 78, 90, 98], 'A'] = 1
df['B'] = np.random.randint(50, 100, size=len(df))
df['result'] = df.loc[df['A'] != 0, 'B'].rolling(4).apply(
lambda x: x[-2:].min() > x[:2].min(), raw=True)
print(df)
df.to_excel("rollingwindow.xlsx",sheet_name="example")
a_guest,我使用了你的代码,输出如下。
第 22 行和第 14 行之间的最小值为 56,大于第 11 行和第 6 行之间的最小值 54。因此,结果必须为 1,但您的代码生成 0。
隔江千里
相关分类