Python 在列表数组中除以每个值

Python 在列表数组中除以每个值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我试图除以列表中每个数组值的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

我试图除以列表中每个数组值的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:

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实现这一点

我认为需要:

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

  • 首先创建
    多索引
    数据帧
  • 除以,必要时转换为
    int
    s
  • 对于每个组的总和,使用可能的减去值
  • 上次创建
    列表
    s时使用

  • 你能把
    dfs.head()发到_dict()吗?@jpp dfs.head()发到_dict()吗AttributeError:“collections.OrderedDict”对象没有属性“head”@jpp-它是数据帧字典。@jpp-
    sheet_name=None
    从所有工作表返回数据帧字典规则2)如果数组的大小始终为2,则可以简化为反转数组,而只有一个值,如“2017-06-09”:[6]然后其显示“2017-06-09”:[0]而不是“2017-06-09”:[6]@MMMMS-因为
    [6]
    的和是
    6
    ,减去
    6-6=0
    。有区别吗?我明白。但是我想要[6]然后6-0=6。@MMMMS我只是检查一下,它有点不同-
    0
    是因为
    int(6/80)
    0
    ,然后
    0-0=0
    否。。。在d=pd.concat(dfs1).div(80).astype(int)之后,OP是{'2017-06-09':[6]},意思是[555/80]=[6]。所以最后的运算应该是[6-0]=[6]
    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]}