Как сгруппироваться с самыми большими и сохранить все столбцы? - PullRequest
0 голосов
/ 11 мая 2019

Я хочу сгруппировать DataFrame и получить самые длинные данные столбца 'C'.в то время как возвращение - серия, а не DataFrame.

dftest = pd.DataFrame({'A':[1,2,3,4,5,6,7,8,9,10],
                       'B':['A','B','A','B','A','B','A','B','B','B'],
                       'C':[0,0,1,1,2,2,3,3,4,4]})
dfn=dftest.groupby('B',group_keys=False)\
            .apply(lambda grp:grp['C'].nlargest(int(grp['C'].count()*0.8))).sort_index()

результат получит серию.

2    1
4    2
5    2
6    3
7    3
8    4
9    4
Name: C, dtype: int64

Я надеюсь, что результатом будет DataFrame, например

    A  B  C
2   3  A  1
4   5  A  2
5   6  B  2
6   7  A  3
7   8  B  3
8   9  B  4
9  10  B  4  

****** update ************** извините, столбец «A» фактически не содержит целых чисел, dftest может быть больше похож на

dftest = pd.DataFrame({'A':['Feb','Flow','Air','Flow','Feb','Beta','Cat','Feb','Beta','Air'],
                       'B':['A','B','A','B','A','B','A','B','B','B'],
                       'C':[0,0,1,1,2,2,3,3,4,4]})

и результат должен быть

    A     B  C
2   Air   A  1
4   Feb   A  2
5   Beta  B  2
6   Cat   A  3
7   Feb   B  3
8   Beta  B  4
9   Air   B  4 

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

Благодаря моим друзьям, следующий код работает для меня.

dfn=dftest.groupby('B',group_keys=False)\
            .apply(lambda grp:grp.nlargest(n=int(grp['C'].count()*0.8),columns='C').sort_index())

значение

In [8]:dfn
Out[8]: 
    A  B  C
2   3  A  1
4   5  A  2
6   7  A  3
5   6  B  2
7   8  B  3
8   9  B  4
9  10  B  4

мой предыдущий код связан с сериями, последний - с DataFrame.

0 голосов
/ 11 мая 2019

Это может быть немного неуклюже, но делает то, что вы просили:

dfn= dftest.groupby('B').apply(lambda 
grp:grp['C'].nlargest(int(grp['C'].count()*0.8))).reset_index().rename(columns= 
{'level_1':'A'})
dfn.A = dfn.A+1
dfn=dfn[['A','B','C']].sort_values(by='A')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...