数据帧按列分组并按范围剪切

2024-04-29 11:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,我正在尝试生成此查询:

哪些地区老年人感染率较高(从55岁开始),哪些地区年轻人感染率较高(到30岁),哪些地区成年人感染率较高(31;54%)

让我们澄清任何问题,第一个问题的意思是-->;获取55岁以上人口数量占其他年龄人口比例最大的地区,因此它应该给我一个地区列表。 类似地,其他两个问题是相同的,但年龄范围不同

我的数据框如下所示:

       Unnamed: 0  state sex   diag  death status T.categ  age
0              1    NSW   M  10905  11081      D      hs   35
1              2    NSW   M  11029  11096      D      hs   53
2              3    NSW   M   9551   9983      D      hs   42
3              4    NSW   M   9577   9654      D    haem   44
4              5    NSW   M  10015  10290      D      hs   39
          ...    ...  ..    ...    ...    ...     ...  ...
2838        2839  Other   M  11475  11504      A     het   46
2839        2840  Other   F  11420  11504      A     het   34
2840        2841  Other   M  11496  11504      A    haem   49
2841        2842  Other   M  11460  11504      A      hs   55
2842        2843  Other   M  11448  11504      A      hs   37
[2843 rows x 8 columns]

我的解决方案是生成一个如下所示的数据帧:

      (0, 30]       (30, 54]     (54, 200]
NSW     45                          ...
VCI     234            ... 
...                    535
Other                               56

有了这一点,就可以更容易地比较哪一个州的数量范围最大

到目前为止,我的代码可以按范围计算数量,但我不知道如何计算,包括按区域分组。。。 以下是我的代码和结果:

data.groupby(pd.cut(data['age'], bins=[0, 30, 54, 200])).size()

[*] 
(0, 30]       736
(30, 54]     1937
(54, 200]     166

请随意推荐任何其他方法或帮助我解决此问题


Tags: 数据代码agedata数量地区hsother
1条回答
网友
1楼 · 发布于 2024-04-29 11:25:10

您还可以按state分组:

data.groupby(['state', pd.cut(data['age'], bins=[0, 30, 54, 200])]).size()

数据帧中包含的示例返回:

state               0  age      
NSW         (0, 30]      0
            (30, 54]     5
            (54, 200]    0
Other       (0, 30]      0
            (30, 54]     4
            (54, 200]    1

相关问题 更多 >