[英]Pandas count number of occurrences of each value between ranges
我有一个数据集,其中我将年龄作为连续变量,并且我想对多个年龄组范围(例如 18-25、26-33 等)在“心理健康”中出现 1 和 0 的次数进行计数.
示例代码如下:
df = pd.DataFrame([[18, 1], [45, 1], [56, 0], [26, 0], [35, 1]], columns=['Age', 'Mental_Health'])
什么是最简单的方法来做到这一点? 如果我可以避免,我真的不想将年龄转换为一个范围,如果我必须这样做,我会但我理想情况下正在寻找具有 18-25 痛苦 = 24,而不是痛苦 = 21 的东西,并且以此类推,适用于所有年龄段。
这样做的最简单方法是什么?
你想要pd.cut
。 您可以定义任意垃圾箱(我在下面使用了范围)。 这将剪切传递的系列,您可以计算不同的“剪切”范围以查看其中有多少行:
df["age_range"] = pd.cut(df.Age, bins=[0,18,25,33,99], right=False)
df2 = df.groupby("age_range").Mental_Health.sum().to_frame(name="suffering")
df2["not_suffering"] = df.groupby("age_range").Mental_Health.count() - df2.suffering
输出:
suffering not_suffering
age_range
[0, 18) 0 0
[18, 25) 1 0
[25, 33) 0 1
[33, 99) 2 1
尝试这个:
import pandas as pd
import numpy as np
df = pd.DataFrame([[18, 1], [45, 1], [56, 0], [26, 0], [35, 1]], columns=['Age', 'Mental_Health'])
df['cuts'] = pd.cut(df['Age'], np.arange(0,100,15))
df.pivot_table(index='cuts', columns='Mental_Health', values='Age', aggfunc='count').fillna(0).astype(int)
输出:
Mental_Health 0 1
cuts
(15, 30] 1 1
(30, 45] 0 2
(45, 60] 1 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.