首页 > 解决方案 > Pandas groupby 有条件

问题描述

假设我有以下df:

| name | age |
| ---  | ----|
| John | 8   |
| John | 2   |
| John | 4   |
| Anna | 8   |
| Anna | 2   |
| Anna | 4   |

我想创建以下 df (有多少个 5 岁及以上同名的孩子):

| name | age < 5 | age > 5 |
| ---  | ----    | -----   |
| John | 2       | 1       |
| Anna | 2       | 1       |

我想我应该使用df.groupby(),但我想不出一种方法来应用这个条件。

标签: pythonpandaspandas-groupby

解决方案


crosstab与 一起使用numpy.where

df = pd.crosstab(df['name'], np.where(df['age'] > 5, 'age>5', 'age=<5'))
print (df)
col_0  age=<5  age>5
name                
Anna        2      1
John        2      1

或者:

df = pd.crosstab(df['name'], df['age'] > 5).rename(columns={False:'age>5',True:'age<=5'})
print (df)
age   age>5  age<=5
name               
Anna      2       1
John      2       1

最后用于列name

df = df.rename_axis(None, axis=1).reset_index()

推荐阅读