#python #pandas #dataframe
Вопрос:
У меня есть сценарий, который использует итерации, и я прочитал, что это неэффективный метод, и хотел бы уточнить свой код. Но, прочитав другие вопросы по этой теме, я не нашел ответа на свой конкретный пример. Я законченный программист-любитель, поэтому был бы признателен за любую помощь в улучшении.
Я просто хочу удалить дубликаты в серии, оставив только первый и оставив пробелы для последующих строк с тем же временем. Я сохраняю время первой строки, несмотря ни на что, поэтому я начинаю со сравнения второго значения.
def clean_times(df):
time = df.iloc[1]['Result'] # initilize to the first time gap
if ':' in time:
for index, row in df.iterrows():
if index > 1:
if row['Result'] == time:
df.loc[index, 'Result'] = ''
else:
time = row['Result']
return df
time = ''
x = [{'Result':'4:51:36'},{'Result':'0:01:27'},{'Result':'0:02:19'},{'Result':'0:02:42'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:02:57'},{'Result':'0:03:03'},{'Result':'0:03:03'},{'Result':'0:03:23'},{'Result':'0:03:23'},{'Result':'0:03:23'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:03:57'},{'Result':'0:04:02'},{'Result':'0:04:15'},{'Result':'0:04:15'},{'Result':'0:04:25'},{'Result':'0:04:25'},{'Result':'0:04:25'}]
df = pd.DataFrame(x)
df1 = clean_times(df)
Результат
Result
0 4:51:36
1 0:01:27
2 0:02:19
3 0:02:42
4 0:02:57
5
6
7
8
9
10
11
12
13
14
15
16
17
18 0:03:03
19
20 0:03:23
21
22
23 0:03:57
24
25
26
27
28
29
30
31
32
33 0:04:02
34 0:04:15
35
36 0:04:25
37
38
Ответ №1:
Просто используйте mask
с условием в следующей (сдвинутой) строке:
df['Result'] = df['Result'].mask(df['Result']==df['Result'].shift(), '')
выход:
Result
0 4:51:36
1 0:01:27
2 0:02:19
3 0:02:42
4 0:02:57
5
6
7
8
9
10
11
12
13
14
15
16
17
18 0:03:03
19
20 0:03:23
21
22
23 0:03:57
24
25
26
27
28
29
30
31
32
33 0:04:02
34 0:04:15
35
36 0:04:25
37
38
Комментарии:
1. Вау, так намного проще, чем мой запутанный способ! Спасибо!