Python Pandas 仅对列进行分组

Python Pandas to group columns only

一个简单的data-frame如下图左边,我想实现右边的:

我使用:

import pandas as pd

data = {'name': ['Jason', 'Molly', 'Tina', 'Jason', 'Amy', 'Jason', 'River', 'Kate', 'David', 'Jack', 'David'], 
'Department' : ['Sales', 'Operation', 'Operation', 'Sales', 'Operation', 'Sales', 'Operation', 'Sales', 'Finance', 'Finance', 'Finance'],
'Weight lost': [4, 4, 1, 4, 4, 4, 7, 2, 8, 1, 8],
'Point earned': [2, 2, 1, 2, 2, 2, 4, 1, 4, 1, 4]}

df = pd.DataFrame(data)

final = df.pivot_table(index=['Department','name'], values='Weight lost', aggfunc='count', fill_value=0).stack(dropna=False).reset_index(name='Weight_lost_count')

del final['level_2']
del final['Weight_lost_count']

print (final)

'final' 行似乎没有必要的步骤。

怎样写比较好?谢谢。

这不就是吗drop_duplicates:

df[['Department','name']].drop_duplicates()

输出:

  Department   name
0      Sales  Jason
1  Operation  Molly
2  Operation   Tina
4  Operation    Amy
6  Operation  River
7      Sales   Kate
8    Finance  David
9    Finance   Jack

并精确匹配final

(df[['Department','name']].drop_duplicates()
   .sort_values(by=['Department','name'])
)

输出:

  Department   name
8    Finance  David
9    Finance   Jack
4  Operation    Amy
1  Operation  Molly
6  Operation  River
2  Operation   Tina
0      Sales  Jason
7      Sales   Kate

尝试 groupbyhead

out = df.groupby(['Department','name']).head(1)