首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除以列表数组中的每个值

除以列表数组中的每个值
EN

Stack Overflow用户
提问于 2018-03-23 20:41:20
回答 1查看 85关注 0票数 1

我尝试除以列表中每个数组值的80。我试过的是,

代码语言:javascript
复制
dfs = pd.read_excel('ff1.xlsx', sheet_name=None)
dfs1 = {i:x.groupby(pd.to_datetime(x['date']).dt.strftime('%Y-%m-%d'))['duration'].sum() for i, x in dfs.items()}
d = pd.concat(dfs1).groupby(level=1).apply(list).to_dict()
print(d)

操作:

代码语言:javascript
复制
{'2017-05-06': [197, 250], '2017-05-07': [188, 80], '2017-05-08': [138, 138], '2017-05-09': [216, 222], '2017-06-09': [6]}

但预期的操作:

代码语言:javascript
复制
1 : Divide by 80
{'2017-05-06': [2, 3], '2017-05-07': [2, 1], '2017-05-08': [2, 2], '2017-05-09': [2, 2], '2017-06-09': [0]}
2 : total of each array and subtract each value (3+2 = 5-3 and 5-2)
{'2017-05-06': [3, 2], '2017-05-07': [1, 2], '2017-05-08': [2, 2], '2017-05-09': [2, 2], '2017-06-09': [0]}

如何使用python做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-03-23 20:55:49

我认为需要:

代码语言:javascript
复制
d = pd.concat(dfs1).div(80).astype(int)
d = d.groupby(level=1).transform('sum').sub(d).groupby(level=1).apply(list).to_dict()
print (d)

{'2017-06-09': [0], '2017-05-08': [1, 1], '2017-05-09': [2, 2], 
 '2017-05-07': [1, 2], '2017-05-06': [3, 2]}

说明

首先按concat

  • Divide按组创建和和,如有必要,按组转换为ints

  • For和使用transform表示可能按GroupBy.apply

减去的值使用sub

  • Last创建lists GroupBy.apply
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49449922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档