我尝试除以列表中每个数组值的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做到这一点?
发布于 2018-03-23 20:55:49
我认为需要:
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
ints
transform表示可能按GroupBy.apply
减去的值使用sub
lists GroupBy.applyhttps://stackoverflow.com/questions/49449922
复制相似问题