Выводится как ноль во фрейме данных с size () в python - PullRequest
2 голосов
/ 16 июня 2019

У меня есть файл, который состоит из трех столбцов: A, B и C с некоторым целым числом.Используя python, допустим, я бы хотел grouby() столбец 'A' ​​и получить size() каждой группы с числом больше 4, 6 и 8 в столбце 'B'.Поэтому я реализовал код ниже:

    >>> import pandas as pd
    >>> 
    >>> df = pd.read_csv("test.txt", sep="\t")
    >>> df
       A  B   C
    0  1  4   3
    1  1  5   4
    2  1  2  10
    3  2  7   2
    4  2  4   4
    5  2  6   6
    >>> 
    >>> out1 = df[df['B'] > 4].groupby(['A']).size().reset_index()
    >>> out1
       A  0
    0  1  1
    1  2  2
    >>> out2 = df[df['B'] > 6].groupby(['A']).size().reset_index()
    >>> out2
       A  0
    0  2  1
    >>> out3 = df[df['B'] > 8].groupby(['A']).size().reset_index()
    >>> out3
    Empty DataFrame
    Columns: [A, 0]
    Index: []
    >>> 

out1 - это вывод, который я хочу.Но для out2 и out3 как получить фрейм данных, аналогичный out1 с нулем, как показано ниже?

out2:
   A  0
0  2  1
1  2  0

out3:
   A  0
0  2  0
1  2  0

Заранее спасибо.

1 Ответ

3 голосов
/ 16 июня 2019

Идея заключается в создании логической маски, преобразовании в целые числа и агрегировании sum - здесь необходимо группировать по Series как df['A'] вместо имени столбца A:

out3 = (df['B'] > 8).astype(int).groupby(df['A']).sum().reset_index()
#alternative
#out3 = (df['B'] > 8).view('i1').groupby(df['A']).sum().reset_index()
print (out3)
   A  B
0  1  0
1  2  0

Другая идея заключается всоздать вспомогательный столбец - например, присвоить B новым значениям и затем агрегировать sum:

out3 = df.assign(B = (df['B'] > 8).astype(int)).groupby('A')['B'].sum().reset_index()
print (out3)
   A  B
0  1  0
1  2  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...