熊猫diff()忽略groupby

时间:2019-04-30 12:31:34

标签: python pandas

首先,如果在某个地方解决了问题,我们深表歉意。我浏览了这些帖子ab,它们似乎并没有解决我的问题。

对于几个对象,我想及时计算参数差异,并将其相加。

综合数据:

import pandas as pd
import numpy as np

np.random.seed(23)

dict_1 = {
    'time': range(100), 
    'object': [1]*100, 
    'parameter_1':np.random.randint(-10,10,100),
    'parameter_2':np.random.randint(-10,10,100)}

dict_2 = {
    'time': range(100), 
    'object': [2]*100, 
    'parameter_1':np.random.randint(-120,-110,100),
    'parameter_2':np.random.randint(-10,10,100)}

df1 = pd.DataFrame(dict_1)
df2 = pd.DataFrame(dict_2)

df = df1.append(df2)

方法:

使用groupbyaggdiff

对于df1:

diffs = df1.groupby(['object', 'time']).agg({'parameter_1': np.mean, 'parameter_2': np.mean}).diff()
diffs['total_variation'] = abs(diffs['parameter_1']) + abs(diffs['parameter_2'])
np.max(diffs['total_variation'])

output: 35

对于df2:

diffs = df2.groupby(['object', 'time']).agg({'parameter_1': np.mean, 'parameter_2': np.mean}).diff()
diffs['total_variation'] = abs(diffs['parameter_1']) + abs(diffs['parameter_2'])
np.max(diffs['total_variation'])

output: 24

用于合并的数据:

diffs = df.groupby(['object', 'time']).agg({'parameter_1': np.mean, 'parameter_2': np.mean}).diff()
diffs['total_variation'] = abs(diffs['parameter_1']) + abs(diffs['parameter_2'])
np.max(diffs['total_variation'])

预期结果:

35

实际结果:

129

因此,看来diff()忽略了分组。 我可以为此编写一个涉及for循环的解决方案,但是由于我的数据很大,所以我宁愿避免这种情况。有办法解决这个问题,还是我滥用了功能?

非常感谢您的帮助!

0 个答案:

没有答案