首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何组合Python / Pandas中的两个指示符列,其中逻辑取决于行的排序

如何组合Python / Pandas中的两个指示符列,其中逻辑取决于行的排序
EN

Stack Overflow用户
提问于 2019-02-13 02:24:14
回答 2查看 320关注 0票数 0

我正在尝试创建一个列,该列在每个入口和出口之间选择所有日期。每个条目只与一个出口配对。

  • 因此,当窗口函数看到一个条目,即1/4/2019,它打开'1‘,直到它看到出口1/6/2019。第二天就关掉了“0”。
  • 它忽略所有出口(即1/6/2019),直到它看到下一项,即1/9/2019,然后开始记录“1”,直到下一个出口,即1/11/2019。

日期是从最近的日期到第一次约会的顺序。

代码语言:javascript
运行
复制
import pandas as pd
import numpy 

df = pd.DataFrame({'Entry':[0,0,0,1,0 ,0,0,0,1,0,0,1],
                    'Exit':[1,0,0,0,0,1,0,1,0,0,1,0]},
                   index = pd.date_range('1/1/2019',periods = 12))
df1 = df.iloc[::-1]
df1

基表如下所示:

我想要创建一个名为windows的额外列,其外观与以下所示完全相同:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-13 04:32:39

这将起作用(我知道这可能不是最重要的节奏曲,但希望你们都能给我分数以提高可读性):

代码语言:javascript
运行
复制
# First I sort so I don't have to work backwards
df1.sort_index(inplace=True)

# Generate Window and then iteratively fill it
df1['Window'] = 0
for index, row in df1.iterrows():
    if row.Entry == 1:
        # Once found, fill all intermediate values as 1 and break.
        # Nothing happens if no exit found.
        for subindex, subrow in df1.loc[index:].iterrows():
            if subrow.Exit == 1:
                df1.loc[index:subindex,'Window'] = 1
                break

# Sort back to the index order you wanted      
df1.sort_index(inplace=True,ascending=False)
票数 2
EN

Stack Overflow用户

发布于 2019-02-13 05:38:33

你在窗口函数中的逻辑对我来说不是很清楚。但是,您需要的似乎是应用一个按行排列的函数,它可以存储一些内存(最后一次输入状态或其他什么)。一个好的方法是定义一个可调用的类,如下所示。注意,在使用此方法之前,您需要按递增日期顺序对df进行排序。

代码语言:javascript
运行
复制
class WindowFunc(object):
    def __init__(self, initial_status):
        self.status = initial_status

    def __call__(self, row, enter_col, exit_col):
        enter_val = row[enter_col]
        exit_val = row[exit_col]

        if self.status == 0 and enter_val == 1 and exit_val != 1:
            self.status = 1
            return 1
        elif self.status == 1 and enter_val != 1 and exit_val == 1:
            current_status = self.status
            self.status = 0
            return current_status
        else:
            return self.status

window_fn = WindowFunc(0)    
df['window'] = np.apply_along_axis(window_fn, 1, df, 0, 1)

实例存储状态,并跨行保存它的内存。您可以更新类中的逻辑以满足您的需求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54661538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档