我试图将列表中的每个数组值除以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)
OP:
{'2017-05-06': [197, 250], '2017-05-07': [188, 80], '2017-05-08': [138, 138], '2017-05-09': [216, 222], '2017-06-09': [6]}
但预期OP:
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执行此操作?
答案 0 :(得分:3)
我认为需要:
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
MultiIndex
DataFrame
div
,必要时转换为int
s transform
可能会减去sub
GroupBy.apply
list
醇>