Панды выбирают строки, в которых существуют относительные значения столбцов в DataFrame - PullRequest
0 голосов
/ 28 сентября 2018

Допустим, у вас есть такой фрейм данных:

>>> df = pd.DataFrame({
        'epoch_minute': [i for i in reversed(range(25090627,25635267))],
        'count': [random.randint(11, 35) for _ in range(25090627,25635267)]})
>>> df.head()
   epoch_minute  count
0      25635266     12
1      25635265     20
2      25635264     33
3      25635263     11
4      25635262     35

и некоторые относительные дельты минут, например:

day = 1440
week = 10080
month = 302400

Как мне выполнить эквивалент этого блока кода:

for i,r in df.iterrows():
    if r['epoch_minute'] - day in df['epoch_minute'].values and \
            r['epoch_minute'] - week in df['epoch_minute'].values and \
            r['epoch_minute'] - month in df['epoch_minute'].values:
        # do stuff

с использованием этого синтаксиса:

valid_rows = df.loc[(df['epoch_minute'] == df['epoch_minute'] - day) &
                    (df['epoch_minute'] == df['epoch_minute'] - week) &
                    (df['epoch_minute'] == df['epoch_minute'] - month]

Я понимаю, почему выбор loc не работает, но я просто спрашиваю, существует ли более элегантный способ выборадопустимые строки без итераций по строкам кадра данных.

1 Ответ

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

Добавьте скобки и & для bitwise AND с isin для проверки членства:

valid_rows = df[(df['epoch_minute'].isin(df['epoch_minute'] - day)) &
                (df['epoch_minute'].isin(df['epoch_minute'] - week)) &
                (df['epoch_minute'].isin(df['epoch_minute'] - month))]

valid_rows = df[((df['epoch_minute'] - day).isin(df['epoch_minute'])) &
                ((df['epoch_minute']- week).isin(df['epoch_minute'] )) &
                ((df['epoch_minute'] - month).isin(df['epoch_minute']))]
...