Pandas数据帧总和列和收集结果

Lam*_*Lam 4 python pandas

给出以下数据帧:

import pandas as pd
p1 = {'name': 'willy', 'age': 11, 'interest': "Lego"}
p2 = {'name': 'willy', 'age': 11, 'interest': "games"}
p3 = {'name': 'zoe', 'age': 9, 'interest': "cars"}
df = pd.DataFrame([p1, p2, p3])
df

    age interest    name
0   11  Lego        willy
1   11  games       willy
2   9   cars        zoe
Run Code Online (Sandbox Code Playgroud)

我想知道每个人的利益总和,并让每个人只在列表中显示一次.我做以下事情:

Interests = df[['age', 'name', 'interest']].groupby(['age' , 'name']).count()
Interests.reset_index(inplace=True)
Interests.sort('interest', ascending=False, inplace=True)
Interests

    age name    interest
1   11  willy   2
0   9   zoe     1
Run Code Online (Sandbox Code Playgroud)

这有效,但我觉得我做错了.现在我正在使用列'兴趣'来显示我的总和值,这是可以的,但就像我说我希望有更好的方法来做到这一点.

我在熊猫中看到了许多关于计算/总和的问题,但对我而言,我忽略了"重复"的部分是关键.

And*_*den 5

您可以在组的每列中使用大小(每个组的长度)而不是计数非NaN.

In [11]: df[['age', 'name', 'interest']].groupby(['age' , 'name']).size()
Out[11]:
age  name
9    zoe      1
11   willy    2
dtype: int64

In [12]: df[['age', 'name', 'interest']].groupby(['age' , 'name']).size().reset_index(name='count')
Out[12]:
   age   name  count
0    9    zoe      1
1   11  willy      2
Run Code Online (Sandbox Code Playgroud)