首先,如果在某个地方解决了问题,我们深表歉意。我浏览了这些帖子a,b,它们似乎并没有解决我的问题。
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)
使用groupby
,agg
和diff
:
对于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循环的解决方案,但是由于我的数据很大,所以我宁愿避免这种情况。有办法解决这个问题,还是我滥用了功能?
非常感谢您的帮助!