Pandas Groupby после подбора на основе значений столбцов - PullRequest
1 голос
/ 06 ноября 2019

Привет, я пытаюсь сгруппировать на основе трех столбцов, а затем агрегировать / сумму четвертого столбца. Меня интересует только, если столбец Mo_Year (с плавающей запятой) равен 10.2019, 11.2019 и 12.2019 и суммирует сумму последнего столбца Сумма. Я пробовал фильтровать с помощью goupby, как указано ниже. Фильтрация для Mo_Year не происходит.

Пример набора данных, как показано ниже

    Name  Mo_Year    Item  Amount
    A1    10.2019    cat     60
    A2    1.2019     dog     40
    A3    12.2019    cat     10  
    A4    3.2019     dog     30
    A5    4.2019     cat     10
    A1    10.2019    dog     50
    A2    11.2019    cat     30
    A3    3.2019     cat     20
    A4    10.2019    dog     10
    A5    11.2019    cat     70
df_test = df1.groupby(['Name','Mo_Year', 'Item']).filter(lambda x: (x['Mo_Year'] == 10.2019).any() & (x['Mo_Year'] == 12.2019).any())                                                                                                                                                   

Может кто-нибудь помочь? Спасибо.

1 Ответ

1 голос
/ 06 ноября 2019

Во-первых, если проверить фильтрация , это работает по-другому.

Возвращает все данные в группах при условии соответствия, в противном случае все данные в группе удаляются.


Если значения являются числами с плавающей запятой, необходимо изменить & на or:

df_test=(df1.groupby(['Name','Mo_Year', 'Item'])
            .filter(lambda x: (x['Mo_Year'] == 10.2019).any() or 
                              (x['Mo_Year'] == 12.2019).any()))

или:

df_test=(df1.groupby(['Name','Mo_Year', 'Item'])
            .filter(lambda x: (x['Mo_Year'].isin([10.2019,11.2019,12.2009]).any())

Но, возможно, groupby не следует указывать, если необходимо выполнить фильтрацию только по условию:

df= df[df['Mo_Year'].isin([10.2019,11.2019,12.2009])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...