为了账号安全,请及时绑定邮箱和手机立即绑定

python 给定感兴趣的子级别的 groupby 方法

python 给定感兴趣的子级别的 groupby 方法

哆啦的时光机 2023-12-09 15:36:55
给定如下所示的 pandas 数据框,我想对“用户”进行某种分组,但在时间列上有一个特殊定义的子标准,对金额列进行求和。   amount  time users0      11     0     A1      23    10     A2      12    20     A3      34    30     A4      56    40     B5      77    50     B6      89    60     C为此,我有一对 range_start 和 range_end 例如在元组或类似列表中。时间列的这些 sub_group_ranges 应该使我能够在数据帧内的每个批次上应用 groupby().sum 。sub_group_ranges = [(0,0),(20,30),(40,50),(60,60)]结果应如下所示。每个用户的间隔计数是任意的。   sum_amount_on_timerange user0                       57    A1                      133    B2                       89    C我发现这篇文章很相似,但如果我没有连续的间隔(意味着第一个间隔的结束不是下一个间隔的开始),我不明白如何使用它。如果有人知道要寻找什么,那就太好了。多谢
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

我不确定我完全理解你想要做什么,但这里有一些可能有用的东西


df = pd.DataFrame([users,time]).T

df.columns = ['users','time']


def filter_time_range(ele,trange):

    if (ele>trange[0]) and (ele<=trange[1]):

        return ele

    else:

        return np.nan

   

sub_group_ranges = [(0,0),(20,30),(40,50),(60,60)]

for trange in sub_group_ranges:

    df[str(trange)] = df['time'].apply(lambda x: filter_time_range(x,trange))

    

df

导致


  users time    (0, 0)  (20, 30)    (40, 50)    (60, 60)

0   A   0        NaN     NaN           NaN      NaN

1   A   10       NaN     NaN           NaN      NaN

2   A   20       NaN     NaN           NaN      NaN

3   A   30       NaN     30.0           NaN     NaN

4   B   40       NaN     NaN           NaN      NaN

5   B   50       NaN     NaN           50.0     NaN

6   C   60       NaN     NaN           NaN      NaN

以及您的用户分组


df.groupby(['users']).sum()



  (0, 0)    (20, 30)    (40, 50)    (60, 60)

users               

A     0.0    30.0   0.0     0.0

B     0.0    0.0    50.0    0.0

C     0.0    0.0    0.0     0.0

我已从amount我的数据框中排除


查看完整回答
反对 回复 2023-12-09
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信