Рекомендованный способ доступа к одной строке в кадре данных панд? - PullRequest
1 голос
/ 14 октября 2019

Я часто хочу выбрать одну строку в Pandas DataFrame, используя несколько условий.

Для дальнейшей обработки полезно использовать его как серию или Dict, а не как 1xW DataFrame.

Я могу сделать это так:

r = df.loc[ (df['col1'] == v1) & (df['col2'] == v2) ]
if len(r.index) != 1:
  raise ValueError(...)
r = r.iloc[0]

Это кажется немного неуклюжим. Есть ли лучший, рекомендуемый способ?

1 Ответ

0 голосов
/ 14 октября 2019

Ни один из встроенных аксессоров не будет делать то, что вы хотите. Вы можете создать свой собственный аксессор и обезьяны-патчить его:

def get(df, **kwargs):
    cond = [True] * df.shape[0]
    for col, value in kwargs.items():
        cond &= df[col] == value

    result = df[cond]
    if result.shape[0] > 1:
        raise ValueError('Key must be unique')
    return result.iloc[0]

pd.DataFrame.get = get

# Usage
df.get(col1=..., col2=..., col3=...)

Однако это относительно медленно, поэтому не вызывайте его в узком цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...