数组元素python中的聚合

2024-10-02 06:22:50 发布

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

我有一个操作:{'2017-05-06': [3, 7, 8],'2017-05-07': [3, 9, 10],'2017-05-08': [4]}

我只想再做一次手术:

{'2017-05-06': [15, 11, 10],'2017-05-07': [19, 13, 12],'2017-05-08': [4]}

意思是:
nclean和2017-05-06
元素总数18所以'2017-05-06': [3 -18, 7-18, 8-18] = '2017-05-06': [15, 11, 10]
所有元素数据也是如此。
所以最终的输出是{'2017-05-06': [15, 11, 10],'2017-05-07': [19, 13, 12],'2017-05-08': [4]}

怎么做?你知道吗

注意:我使用的是python3.6.2和pandas0.22.0

迄今为止的代码:

import pandas as pd
dfs = pd.read_excel('ff2.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()
actuald = pd.concat(dfs1).div(80).astype(int)
sum1 = actuald.groupby(level=1).transform('sum')
m = actuald.groupby(level=1).transform('size') > 1
cleand = sum1.sub(actuald).where(m, actuald).groupby(level=1).apply(list).to_dict()
print (cleand)

我想干这个?你知道吗


Tags: to元素transformleveldictlistpdapply
2条回答

以一种紧凑(但不知何故效率低下)的方式:

>>> op = {'2017-05-06': [3, 7, 8],'2017-05-07': [3, 9, 10],'2017-05-08': [4]}
>>> { x:[sum(y)-i for i in y] if len(y)>1 else y for x,y in op.items() }

#output:
{'2017-05-06': [15, 11, 10], '2017-05-07': [19, 13, 12], '2017-05-08': [4]}
def get_list_manipulation(list_):
    subtraction = list_
    if len(list_) != 1:
        total = sum(list_)
        subtraction = [total-val for val in list_]
    return subtraction

for key, values in data.items():
    data[key] = get_list_manipulation(values)
>>>{'2017-05-06': [15, 11, 10], '2017-05-07': [19, 13, 12], '2017-05-08': [4]}

相关问题 更多 >

    热门问题