如果数据中的前两个值小于数据中的第三个值,如何过滤返回值的条件的数据帧?

2024-09-28 13:12:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个数据框中有一组数据,我需要寻找一段时间,其中销售连续两个季度下降,然后我需要寻找一段时间,其中销售连续两个季度上升

我在下面列出了一部分数据供参考

              Sales in Millions
     Year1Q1  15
     Year1Q2  13
     Year1Q3  16
     Year1Q4  14
     Year2Q1  12
     Year2Q2  11
     Year2Q3  10
     Year2Q4  11
     Year3Q1  11
     Year3Q2  10
     Year3Q3  15
     Year3Q4  17

如您所见,在第1季度之后,连续两年的销售额下降。然后,由于销售额连续两次增长,第三年第三季度和第四季度的低销售额有所回升

我需要查询数据帧以返回Year1Q4,然后返回Year3Q4。如果您有任何关于如何制定数据帧查询的想法,我们将不胜感激


Tags: 数据insales季度销售额millionsyear2q1year1q3
1条回答
网友
1楼 · 发布于 2024-09-28 13:12:20

在pandas中可能有一种很酷的方法可以做到这一点,但对于数据帧上更复杂的操作,一种好的方法是编写一个小函数,可以在数据帧的每一行上执行,然后使用df.apply

为了简单起见,我使用了列名quartersales

# get a list of all quarters, will make things easier later
quarters = df['quarter'].values.tolist()

# define windowing function
# True = last quarter in a 4 quarter window that matches your criteria
# False = all others
def check_quarter(quarter):
    q_index = quarters.index(quarter)
    window = quarters[q_index-3: q_index+1]
    sales = df[df['quarter'].isin(window)]['sales'].values.tolist()
    if len(sales) == 4 and sales[1] < sales[0] and sales[3] > sales[2]:
        return True
    return False

# assign bools to new column
df['check'] = df['quarter'].apply(check_quarter)

# select quarters
df[df['check'] == True]['quarter']

相关问题 更多 >

    热门问题