Мой цикл сохраняет только результат последней итерации - PullRequest
0 голосов
/ 03 ноября 2018
import numpy as np
import pandas as pd

Это мои данные:

ts = pd.DataFrame([0,1,2,3,4,5,6,7,8,9,10,11,12])
ts.columns = ["TS"]
start_df = pd.Series([1,3,6])
end_df = pd.Series([2,7,10])

Я создал следующую функцию для очистки моего цикла и цикл for для итерации каждого элемента в ts и сохранения в соответствии с выводом check_if.

def check_if(start, ts, end):
    if start <= ts <= end:
        return 1
    else:
        return 0

ts["Flagg"] = np.nan
for ix, hour in enumerate (ts["TS"]):
    for jx, end in enumerate(end_df):
        ts["Flagg"][ix] = check_if(start_df[jx], hour, end_df[jx])

Проблема в том, что мой полученный ts["Flagg"] сохраняет только результат последней итерации, start_df == 6 и end_df == 10. Моя логика в цикле полностью из?

Edit:
Ожидаемый результат

[0,1,1,1,1,2,2,1,1,1,0,0] 

в столбце ts["Flagg"].

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Вы можете создать столбец (серия, список), а затем установить его как столбец, как указано в jezrael, или создать столбец с некоторыми начальными значениями, а затем изменить их в цикле:

ts["Flagg"] = [0 for _ in range(ts.size)]
for ix, hour in enumerate (ts["TS"]):
    for jx, end in enumerate(end_df):
        ts["Flagg"][ix] = check_if(start_df[jx], hour, end_df[jx])
0 голосов
/ 03 ноября 2018

Используйте between с пониманием списка для списка логической маски и затем sum это для значений счетчика True (такие процессы, как 1), спасибо @RafaelC за улучшение:

ts['new'] = np.sum([ts['TS'].between(x, y) for x, y in zip(start_df, end_df)], axis=0)
print (ts)
    TS  new
0    0    0
1    1    1
2    2    1
3    3    1
4    4    1
5    5    1
6    6    2
7    7    2
8    8    1
9    9    1
10  10    1
11  11    0
12  12    0

Подробнее :

print ([ts['TS'].between(x, y) for x, y in zip(start_df, end_df)])

[0     False
1      True
2      True
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11    False
12    False
Name: TS, dtype: bool, 0     False
1     False
2     False
3      True
4      True
5      True
6      True
7      True
8     False
9     False
10    False
11    False
12    False
Name: TS, dtype: bool, 0     False
1     False
2     False
3     False
4     False
5     False
6      True
7      True
8      True
9      True
10     True
11    False
12    False
Name: TS, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...