python - pandas 组内的动态子分组

标签 python pandas pandas-groupby

有没有更简单/更正确的方法来分配动态组? 让我们 saq 我们有以下 df:

group    days(int, >0)
  A        1
  B        12
  A        14
  A        16
  A        19
  B        23
  C        92
  C        12

我想根据以下规则分配子组:

if days >20 then subgroup = 4
if days <= 20 then subgroup = 3
if days <= 10 then subgroup = 2
if days == 0 then subgroup = 1

这是我现在的做法:

df['subgroup'] = 4
df.loc[df['days'] >20,'subgroup'] = 4
df.loc[df['days'] <=20,'subgroup'] = 3
df.loc[df['days'] <=10,'subgroup'] = 2
df.loc[df['days'] ==0,'subgroup'] = 1
df = df.reset_index()
df['dynamic_subgroup'] = df.groupby(['group'])['subgroup'].rank(method='dense')

结果表是这样的:

group    days(int, >0)     dynamic_subgroup
  A        1                    1
  B        12                   1
  A        14                   2
  A        16                   3
  A        19                   4
  B        23                   2
  C        92                   2
  C        12                   1

我想知道是否有更简单/更好的方法可以在 Pandas 中实现相同的结果?一般来说,对代码的任何更正都会受到赞赏。

最佳答案

您可以使用cut用于装箱:

bins = [-1, 0, 10, 20, np.inf]
labels=[1,2,3,4]
df['subgroup'] = pd.cut(df['days'], bins=bins, labels=labels)
print (df)
  group  days subgroup
0     A     1        2
1     B    12        3
2     A    14        3
3     A    16        3
4     A    19        3
5     B    23        4
6     C    92        4
7     C    12        3

关于python - pandas 组内的动态子分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669507/

相关文章:

python - Pandas:将带有 MultiIndex 的 DataFrame 转换为字典

python - 将数据分成连续的组

python - 无法从 Python 中的当前文件夹加载库

python - Python 图像库在 PyPI 上不可用,还是我遗漏了什么?

python - 如何从Python数据帧中行的前一个密集等级读取值

python - 为字典中的每个键值创建单独的 pandas 数据帧

python - Pandas - 将滚动应用于列速度

python - 如何在图表中绘制 pandas groupby 值

python - 类型错误 : 'BaseQuery' object is not callable Flask

python - DataFrame 可以是 "reverse indexed"吗?