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

2024-10-05 22:03:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

操作:

{'2017-05-06': [197, 250], '2017-05-07': [188, 80], '2017-05-08': [138, 138], '2017-05-09': [216, 222], '2017-06-09': [6]}

但预期的行动:

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实现这一点?你知道吗


Tags: andtoname列表read数组xlsxexcel
1条回答
网友
1楼 · 发布于 2024-10-05 22:03:55

我认为需要:

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]}

解释:

  1. 首先通过^{}创建MultiIndex数据帧
  2. 除以^{},必要时转换成ints
  3. 对于每个组的总和,使用^{}作为可能的值减去^{}
  4. 最后用^{}创建lists

相关问题 更多 >