全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
770 1
2019-10-17
悬赏 100 个论坛币 已解决
id    a       b                c                d        

1     2       5          20190810    20190930              
1     6       6          20190810    20190930
1     7       10        20190821    20180930   
1     9       20        20191011    20190930   

2     2        5         20190810    20190820               
2     6        6         20190810    20190820  
2     7       10        20190821     20180820   
2     9       20         20191011    20190820   




请教大神一个问题,id那一列是人,一个人对应一个id,a和b列对应的是数字,c,d列对应的是日期,d列的每个ID对应的日期都是一样的
现在要求计算每个人,也就是每个id对应的,c列日期小于d列日期时a列对应的值的总和,和b列对应的值的总和,并用b的总和减去a列总和

比如id是1的,计算就是(5+6+10)-(2+6+7),id是2的计算就是(5+6)-(2+6)





最佳答案

和蔼的昂昂昂 查看完整内容

def ab(df): middle = df[df['c']
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-10-17 15:15:09
def ab(df):
    middle = df[df['c']<df['d']]
    return middle['b'].sum() - middle['a'].sum()

result = df.groupby('id').apply(ab)
print(result)

其中df为你的原始数据文件(DataFrame格式),groupby根据id分组,之后每一个分组调用函数ab即可
另:你的原始数据中d列第三个数为20180930,与计算结果不符合,如果按照原始数据计算,结果应为3,3
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群