Как отфильтровать данные в pandas из списка? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть список вроде

l = [[Alex,Jan,Fri],[John,Feb,Mon],[Alex,Jan,Fri],[Alex,Feb,Mon],[John,Jan,Mon]]

Я хочу отфильтровать список за конкретный месяц, скажем «Январь», и список должен выглядеть так

l=[[Alex,2],[John,1]]

где 2 и 1 - их количество появлений в списке с конкретным месяцем, используя pandas, это то, что я пробовал

import pandas as pd
li = pd.DataFrame(l, columns=['name', 'month', 'day'])
l = li.filter('month'=Jan).name.count().reset_index().values.tolist()

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Используйте для python решения с Counter в понимании списка:

from collections import Counter

L = [list(x) for x in Counter([a for a,b,c in l if b == 'Jan']).items()]
print (L)
[['Alex', 2], ['John', 1]]

Pandas решение с DataFrame.query и Series.value_counts :

l = li.query("month=='Jan'").name.value_counts().reset_index().values.tolist()
print (l)
[['Alex', 2], ['John', 1]]
1 голос
/ 09 июля 2020

Это можно сделать с помощью списков и dicts

l = [['Alex','Jan','Fri'],['John','Feb','Mon'],['Alex','Jan','Fri'],['Alex','Feb','Mon'],['John','Jan','Mon']]

target_month = 'Jan'

result_dict = {}

for obs in l:
    if obs[1] == target_month:
        if obs[0] in result_dict.keys():
            result_dict[obs[0]] += 1
        else:
            result_dict[obs[0]] = 1
    
ret_list = []        
for k,v in result_dict.items():
    ret_list.append([k,v])
    
print(ret_list)

это выведет:

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