使用 .loc 过滤后,熊猫在 df 中包含单行

加布里埃尔·特卡兹

所以,在这个函数中:

def filter_by_freq(df, frequency):
    filtered_df = df.copy()
    
    if frequency.upper() == 'DAY':
        pass
        
    else:
        date_obj = filtered_df['Date'].values[0]
        target_day = pd.to_datetime(date_obj).day
        target_month = pd.to_datetime(date_obj).month
        
        final_date_obj = filtered_df['Date'].values[-1]
        
        if frequency.upper() == 'MONTH':
            filtered_df = filtered_df.loc[filtered_df['Date'].dt.day.eq(target_day)]
        
        elif frequency.upper() == 'YEAR':
            filtered_df = filtered_df.loc[filtered_df['Date'].dt.day.eq(target_day)]
            filtered_df = filtered_df.loc[filtered_df['Date'].dt.month.eq(target_month)]
    
    return filtered_df

我怎样才能.loc在原始df的最后一行中包含?尝试过(每月频率):filtered_df = filtered_df.loc[(filtered_df['Date'].dt.day.eq(target_day)) | (filtered_df['Date'].dt.date.eq(final_date_obj))]但没有奏效。

谢谢你的时间!

米托瑞博

这是您可以做到的一种方法。在此示例中,我有一个 df 并且我想过滤掉所有具有 的行c1 > 0.5,但无论如何我都想保留最后一行。我创建了一个布尔序列lte_half来跟踪第一个条件,然后我创建了另一个布尔序列/列表/数组(都可以互换)end_indTrue它只用于最后一行。过滤表是通过获取所有通过任一条件的行来创建的|

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame({'c1':np.random.rand(20)})
lte_half = df['c1'].le(0.5)
end_ind = df.index == df.index[-1]

filt_df = df[lte_half | end_ind]
print(filt_df)

在此处输入图像描述

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章