python - 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()
,但我想不出一种方法来应用这个条件。
解决方案
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()
推荐阅读
- javascript - 启用复选框时如何隐藏工具提示
- sql - SparkSQL 解析 - SqlBase.g4 无法识别小写关键字和标识符
- asp.net - 如何编写我的 ajax 代码以从剃刀视图移动到另一个视图?
- html - Visual Studio '不能在 div 中包含 td'
- sql-server - SQL Find Groups that do not have Value
- javascript - React:URL更改但组件未呈现
- kotlin - 为什么我在 Kotlin 中使用暴露时会收到错误消息?
- c# - C# 复杂 Json 反序列化
- c# - What's the best way to sort about 2.5 million records in memory in c#?
- macos - 自定义文本视图的自动布局支持