如何用Pandas为DataFrame新增Days_Group列实现天数分组?
嗨,这个需求用Pandas处理起来很简单,我给你两种常用的实现方式,你可以根据自己的习惯选择:
方法一:使用pd.cut()(适合区间分组场景)
pd.cut()是Pandas专门用于数值区间分组的工具,非常适配这种按范围划分的需求。不过你的规则里有几个边界细节需要先明确:
- 7.0 ≤ days ≤7.1 的值没有定义分组(比如7.05)
- 14.0 < days <15.0 的值也没有定义(比如你示例里的14.9)
我先严格按照你给出的规则写代码,你可以根据实际数据调整边界逻辑:
import pandas as pd import numpy as np # 假设你的DataFrame名为df,这里用你给的示例数据初始化 df = pd.DataFrame({'days': [1, 3.0, 2, 4.6, 14.9, 7.1, 15.1, 109]}) # 定义分组区间和对应的标签 # 区间划分:(-∞,7.0), [7.0,7.1), [7.1,14.0), [14.0,15.0), [15.0,+∞) bins = [-np.inf, 7.0, 7.1, 14.0, 15.0, np.inf] labels = ['1-6 days', np.nan, '7-14 days', np.nan, '> 14 days'] # 生成分组列,include_lowest=True确保左边界包含在内 df['Days_Group'] = pd.cut(df['days'], bins=bins, labels=labels, include_lowest=True) # 如果需要处理未定义的边界值(比如把7.0-7.1归到"7-14 days",14.0-15.0归到"> 14 days"),可以补充: # df.loc[df['days'].between(7.0,14.0), 'Days_Group'] = '7-14 days' # df.loc[df['days'] >14.0, 'Days_Group'] = '> 14 days'
方法二:使用np.select()(适合自定义多条件场景)
如果你觉得区间划分不够直观,用np.select()可以直接写每个分组的判断条件,逻辑更清晰易懂:
import pandas as pd import numpy as np df = pd.DataFrame({'days': [1, 3.0, 2, 4.6, 14.9, 7.1, 15.1, 109]}) # 定义条件列表和对应的分组标签 conditions = [ df['days'] < 7.0, # 0-7天(不含7.0) (df['days'] >= 7.1) & (df['days'] <= 14.0), # 7.1-14.0天(包含两端) df['days'] >= 15.0 # 15天及以上 ] choices = [ '1-6 days', '7-14 days', '> 14 days' ] # 生成分组列,default是未匹配到任何条件时的值(比如14.9这种) df['Days_Group'] = np.select(conditions, choices, default=np.nan) # 如果你想把14.0到15.0之间的值也归到"> 14 days",只需要调整第三个条件: # conditions[-1] = df['days'] > 14.0 # 这样14.9就会被分到"> 14 days"组,更符合直觉
测试结果(原规则)
用你给的示例数据运行后,Days_Group列的结果如下:
| days | Days_Group |
|---|---|
| 1 | 1-6 days |
| 3.0 | 1-6 days |
| 2 | 1-6 days |
| 4.6 | 1-6 days |
| 14.9 | NaN |
| 7.1 | 7-14 days |
| 15.1 | > 14 days |
| 109 | > 14 days |
内容的提问来源于stack exchange,提问作者okl
相关产品推荐
相关产品推荐

