Предположим, у нас есть файл с именем any_csv.csv
, содержащий ...
A,B,random
1,2,300
3,4,300
5,6,300
1,2,300
3,4,350
8,9,350
4,5,350
5,6,320
7,8,300
3,3,300
Я хочу сохранить все строки, где random
изменяется / изменяется.Я сделал эту небольшую программу для достижения этой цели, но, поскольку я хочу больше узнать о пандах и поскольку моя программа работает медленнее, чем я ожидаю (~ 130 секунд, чтобы обработать файл журнала объемом 1,2 миллиона строк), я прошу вашей помощи.
import pandas as pd
import numpy as np
df = pd.read_csv('any_csv.csv')
mask = np.zeros(len(df.index), dtype=bool)
# Initializing my current value for comparison purposes.
mask[0] = 1
previous_val = df.iloc[0]['random']
for index, row in df.iterrows():
if row['random'] != previous_val:
# If a variation has been detected, switch to True current, and previous index.
previous_val = row['random']
mask[index] = 1
mask[index - 1] = 1
# Keeping the last item.
mask[-1] = 1
df = df.loc[mask]
df.to_csv('any_other_csv.csv', index=False)
Полагаю, вкратце, я хотел бы знать, как применить мой if в этом самодельном цикле for, который в целом довольно медленный.
Результаты:
A,B,random
1,2,300
1,2,300
3,4,350
4,5,350
5,6,320
7,8,300
3,3,300