【问题标题】:Bin a column grouped by the values of another column按另一列的值分组的列
【发布时间】:2018-03-15 23:11:49
【问题描述】:

我想创建一个新列,其中的分箱值按另一列分组。带有按年份分类的样本数据集如下所示:

Year    A   Bin
1999    1   [1-3]
1999    3   [1-3]
1999    10  [10-11]
1999    11  [10-11]
2000    43  [39-43]
2000    39  [39-43]
2000    22  [20-23]
2000    21  [20-23]
2001    11  [10-11]
2001    10  [10-11]
2001    198 [185-200]
2001    188 [185-200]

我使用过pd.cut,但我无法在每年而不是整个专栏中将其放入垃圾箱。 我尝试使用此功能,但出现错误:TypeError: 'Series' object is not callable

def var_to_bins(dataset, var, num_bins):
    dataset[str(var)+'_test'] = dataset.groupby(dataset.survyear(pd.cut(dataset[var], num_bins)))

有没有更好的方法来解决这个问题?

【问题讨论】:

  • 预期输出是什么?
  • 我的预期输出是 Bin 列。也许我不清楚。例如,使用上面的数据,我希望 A 每年分为两个箱,但目前我只能将 A 划分为整个列的两个箱。很抱歉造成混乱。
  • 我修改了答案,但仍然不能 100% 确定这是否是您想要的。

标签: python pandas


【解决方案1】:

我认为需要:

dataset['Bins'] = dataset.groupby('Year')['A'].transform(lambda x: pd.cut(x, 2))
print (dataset)
    Year    A        Bin            Bins
0   1999    1      [1-3]     (0.99, 6.0]
1   1999    3      [1-3]     (0.99, 6.0]
2   1999   10    [10-11]     (6.0, 11.0]
3   1999   11    [10-11]     (6.0, 11.0]
4   2000   43    [39-43]    (32.0, 43.0]
5   2000   39    [39-43]    (32.0, 43.0]
6   2000   22    [20-23]  (20.978, 32.0]
7   2000   21    [20-23]  (20.978, 32.0]
8   2001   11    [10-11]  (9.812, 104.0]
9   2001   10    [10-11]  (9.812, 104.0]
10  2001  198  [185-200]  (104.0, 198.0]
11  2001  188  [185-200]  (104.0, 198.0]

【讨论】:

  • 这正是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-02-10
  • 2017-12-08
  • 2021-05-16
  • 1970-01-01
  • 2018-11-29
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多