Reputation: 157
I have one column, and another is datetime which is in index position I done some coding on this. I try to use for loop for below condition but need optimization or list comprehension.
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(254), freq='D')
dd = pd.DataFrame()
cc = sorted(np.random.randint(0,32,255))
dd['mean_base'] = cc
dd['time'] = days
dd.set_index('time',inplace=True)
rle = [(k, sum(1 for i in g)) for k,g in itertools.groupby(dd['mean_base'])]
# output Ex: rle = [(66,3),(35,12),(66,185),(35,190)]
count1 = 0
for i in rle:
if i[0] >= 65:
if i[1] >= 185:
count1 += 1
else:
pass
# Suggested by someone
count2 = sum([np.floor(i[1]/rolling_window) for i in rle if i[0]>=1])
# I didn't get this. (May be need changes)
print(count1)
#output: 1
screenshot
Is there any other way or how can I use list comprehension or code optimization?
Upvotes: 0
Views: 197
Reputation: 30050
IIUC, you can try
count1 = sum([(i >= 2) and (j >= 32) for i, j in rle])
# or with pandas
count1 = len(pd.DataFrame(rle).loc[lambda df: df[0].ge(2) & df[1].ge(32), :])
Upvotes: 0