【发布时间】:2019-02-12 13:11:51
【问题描述】:
我 我试图在数据框中创建一个指标列,查看进入和退出列的值并创建一个具有以下逻辑的窗口:
- 查找条目为 1(2019 年 1 月 3 日)的最早日期并将窗口标记为 1。
- 窗口保持为 1,直到退出为 1(2019 年 1 月 5 日)。
- 然后窗口变为 0,直到找到下一个条目的值 等于 1(2019 年 1 月 8 日)。
- 该过程一直重复到 DataFrame 中的最新日期。
因此,对于 Window 列,必须跟随一个出口和入口,或者对于每个入口,最终都会有一个出口(参见下面的示例)。 另请注意,日期索引是倒序的。
df = pd.DataFrame({'C1':[5,3,4,5,4,2,1,4,5,4,2,3],
'C2':[3,3,2,3,4,1,3,2,3,5,3,3]},
index = pd.date_range('1/1/2019',periods = 12))
df1 = df.iloc[::-1]
# Create function to add entry and exit criteria
def window_range(df):
crit1 = ((df['C1'] >2) & (df['C1'].shift(-1) < df['C1']))
crit2 = (df['C2'].shift(-1)==3)
entry = crit1&crit2
df['Entry'] = np.where(entry,1,0)
exit = (df['C1'] < df['C1'].shift(-1))
df['Exit'] = np.where(exit,1,0)
return df
df2 = window_range(df1)
df2
# The Column I'd like to add
window = list([1,0,1,1,1,0,0,1,1,1,0,0])
df2['window'] = pd.Series(window, index=df2.index)
df3 = df2
# Desired Final Output
df3
【问题讨论】:
-
为什么是
list-comprehension标签? -
我尽可能使用列表推导构建我的大部分代码。在这一点上,我会采取任何解决方案。谢谢
标签: python pandas loops list-comprehension