Этот вопрос несколько сложнее, чем Удалите повторяющиеся строки в кадре данных pandas на основе условия :
Вместо одного столбца 'value' у меня теперь есть два столбца 'valu1', 'valu2 ':
t valu1 valu2
2015-08-01 1 10
2015-08-01 2 11
2015-08-01 3 12
2015-09-31 4 15
2015-10-31 5 13
В приведенном выше кадре данных я хочу удалить повторяющиеся строки (т. е. строку, в которой повторяется столбец 't'
), сохранив строку с более высоким значением в столбце valu1
и более низкое значение в столбце value2
.
Ожидаемый результат:
t valu1 valu2
2015-08-01 3 10
2015-09-31 4 15
2015-10-31 5 13
df.sort_values()
и drop_duplicates
с keep='last'
, упомянутыми в связанном вопросе, очевидно, неРабота.
Что-то, о чем я могу думать сейчас:
#Let's call the dataframe df
dups = df[df['t'].duplicated()]['t'].drop_duplicates() #get duplicated dates
for d in dups:
max_v1 = df[df['t'] == d]['valu1'].max() #find the max of valu1 on day d
min_v2 = df[df['t'] == d]['valu2'].min() #find the min of valu2 on day d
df[df['t'] == d]['valu1'] = max_v1 #set valu1 of day d to max_v1
df[df['t'] == d]['valu2'] = min_v2 #set valu2 of day d to min_v2
df = df[~df.index.duplicated()] #drop everything duplicated
Я думаю, что это должно сработать, но это действительно кажется простым, особенно мне действительно нужно сделать это для большого набора данных.Есть идеи, как мне подойти к этой проблеме?