从pandas datafrmae开始有条件地删除行

时间:2018-05-08 01:12:54

标签: python pandas

我按时间顺序排列了一些数据。索引是具有分钟级别分辨率的日期时间。我将小时存储在名为minute的小时和分钟列中。我想修剪数据的开头,以便始终以00:00开始。传入的数据集可以从一天中的某个随机分钟开始。数据由多日(1000)的分钟级行组成。所以失去第一天的一部分不是问题。我只需要在午夜开始数据。

我正在尝试使用以下代码修剪我的数据框,以便始终以00:00开始。

def clean_start_data (df):
for index, row in df.iterrows():
    if row['hour'] > 0 or row['minute'] > 0:
        df.drop(index, inplace=True)
    else:
        break
return df

但是我被困住了,我的内核变得没有反应

我做错了什么?

修改

我的数据看起来像这样

h = 9 m = 0 data = blah
h = 9 m = 1 data = blahhbadf
h = 9 m = 2 data = somethning_else
....
h = 0 m = 0 data = something. // new day...I want to start here and remove all rows above

数据涵盖大约400天。在h = 23 m = 59时,h返回0并且分钟返回到0。

我想从我的数据中删除在新的一天开始之前发生的时间条目。例如。我希望我的数据从h = 0 m = 0开始。

1 个答案:

答案 0 :(得分:1)

我认为这只是一个简单的布尔过滤器。

df.loc[(df.hour==0)|(df.minute==0)]

修复您的代码

def clean_start_data (df):
    l=[]
    for index, row in df.iterrows():
        if row['hour'] > 0 or row['minute'] > 0:
            l.append(index)
        else:
            break
    return  df.drop(l, inplace=True)