Pandas dataframe применить функцию к значениям нескольких строк в виде списка - PullRequest
0 голосов
/ 08 мая 2020

Мой вопрос основан на следующем:

Применить pandas функцию к столбцу только в определенных строках

Но мне нужна функция, которая применяется к значениям из нескольких строк в одном столбце, как если бы эти значения были списком.

Например, если я выбираю категорию c1, моя функция должна применяться следующим образом: f ([3,5])


|   user  |       category    | val  | 
| ------  | ------------------| -----|
| user 1  | c1                |   3  |  
| user 1  | c2                |   4  |
| user 1  | c3                |   8  | 
| user 2  | c1                |   5  |
| user 2  | c2                |   9  | 
| user 2  | c3                |   10 |

Ответы [ 2 ]

1 голос
/ 09 мая 2020

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

df = pd.DataFrame({'user':['user 1','user 1','user 1','user 2','user 2','user 2'],
                   'category':['c1','c2','c3','c1','c2','c3'],
                   'val':[3,4,8,5,9,10]})

def custom_func(df, category):

    partial_df = df[df.category==category].copy()
    if len(partial_df.val)<10 and partial_df.val.duplicated().sum()>0:
        return True
    else:
        return False

custom_func(df, 'c1')
0 голосов
/ 10 мая 2020

Думаю, мне удалось сделать это правильно, основываясь на ответе @Marco Cerliani.

Сначала идет фрейм данных со столбцом filter_keywords.

Это далеко не элегантно ...

urls = ['url1','url2']

def size_check(df, URL):
    partial_df = df[df.URL==URL].copy()
    if len(partial_df.filter_keywords)<10: 
        return True
    else:
        return False

# true there is a duplicate. false there is no duplicate
def duplicate_check(df, URL):
    partial_df = df[df.URL==URL].copy()
    if partial_df.filter_keywords.duplicated().sum()>0:
        return True
    else:
        return False

def total_check(df, URL):
    if (not duplicate_check(df, url)) and size_check(df, url):
          print(url+" ok")
    else:
        print(url+" NOT ok")      

for url in urls:    
    total_check(df, 'URL')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...