Python Pandas, если значение столбца больше - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть простой вопрос, но я не знаю, как его реализовать. У меня есть следующий фрейм данных:

ID    Value
1     100
2     250
3     300
4     400
5     600
7     800

Я хотел бы взглянуть на 2 идентификатора: 3 и 5, а затем отбросить тот, у которого более низкое значение. Поэтому я предполагаю, что буду использовать что-то вроде следующего кода, но опять же, я не уверен, как реализовать, и не уверен, как использовать неравенство, чтобы указывать на значение, направляя мою функцию на очень специфическую пару идентификаторов.

def ChooseGreater(x):
    if df['id'] == 3 > df['id'] ==5
        return del df['id']==5
    else:
        return del df['id']==3

Спасибо!

Ответы [ 4 ]

0 голосов
/ 04 сентября 2018

Это метод из groupby

df.loc[df.Value.groupby((~df.ID.isin([3,5])).sort_values().cumsum()).idxmax()].sort_index()
Out[167]: 
   ID  Value
0   1    100
1   2    250
3   4    400
4   5    600
5   7    800
0 голосов
/ 04 сентября 2018

Вы можете вычислить idxmin и затем использовать np.in1d с pd.DataFrame.loc:

idx = df.loc[df['ID'].isin([3,5]), 'Value'].idxmin()
res = df.loc[~np.in1d(df.index, idx)]

print(res)

   ID  Value
0   1    100
1   2    250
3   4    400
4   5    600
5   7    800
0 голосов
/ 04 сентября 2018

Использование Python's min

df.drop(min(df.query('ID in [3, 5]').index, key=df.Value.get))

   ID  Value
0   1    100
1   2    250
3   4    400
4   5    600
5   7    800

groupby и tail

df.sort_values('Value').groupby(df.ID.replace({3: 5})).tail(1)

   ID  Value
0   1    100
1   2    250
3   4    400
4   5    600
5   7    800
0 голосов
/ 04 сентября 2018

Я думаю, что вы можете сделать:

df.drop(df.loc[df.ID.isin([3,5]),'Value'].idxmin(), inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...