pandas 如何在python Dataframe 中生成一个时间段内的值?

0s0u357o  于 2023-02-02  发布在  Python
关注(0)|答案(1)|浏览(111)

我有一些特定期间范围内的数据(期间0、1、2 ......),我希望创建期间内的值,这些值将获得值的差值,并除以将要设置的期间总数;
例如:

import pandas as pd

data = [{'metric': '3f00d0b5', 'time':52.66, 'time_order': 0, 'variable': 'var1', 'value': 0.035},
        {'metric': '3f00d0b5', 'time':422.4, 'time_order': 1, 'variable': 'var1', 'value': 0.512},
        {'metric': '3f00d0b5', 'time':620.1, 'time_order': 2, 'variable': 'var1', 'value': 0.0},
        
        {'metric': '3f00d0b5', 'time':52.66, 'time_order': 0, 'variable': 'var2', 'value': 0.007},
        {'metric': '3f00d0b5', 'time':422.4, 'time_order': 1, 'variable': 'var2', 'value': 0.012},
        {'metric': '3f00d0b5', 'time':620.1, 'time_order': 2, 'variable': 'var2', 'value': 0.214},
            
        {'metric': '83e7fdd1', 'time':25.42, 'time_order': 0, 'variable': 'var1', 'value': 0.0},
        {'metric': '83e7fdd1', 'time':322.45, 'time_order': 1, 'variable': 'var1', 'value': 0.241},
        {'metric': '83e7fdd1', 'time':678.12, 'time_order': 2, 'variable': 'var1', 'value': 0.005},
        
        {'metric': '83e7fdd1', 'time':25.42, 'time_order': 0, 'variable': 'var2', 'value': 0.02},
        {'metric': '83e7fdd1', 'time':322.45, 'time_order': 1, 'variable': 'var2', 'value': 0.007},
        {'metric': '83e7fdd1', 'time':678.12, 'time_order': 2, 'variable': 'var2', 'value': 0.0}
]
    
df = pd.DataFrame.from_dict(data)

根据以上数据,我需要的最终结果是:

{'metric': '3f00d0b5',  'time':52.66, 'time_order': 0, 'variable': 'var1', 'value': 0.035},
{'metric': '3f00d0b5',  'time':52.66, 'time_order': 0.1, 'variable': 'var1', 'value': 0.083},
...
{'metric': '3f00d0b5',  'time':52.66, 'time_order': 0.9, 'variable': 'var1', 'value': 0.4643},
{'metric': '3f00d0b5',  'time':422.4, 'time_order': 1, 'variable': 'var1', 'value': 0.512},

有没有一个直接的方法来实现这个在一个Python的方式?
先谢谢你莱昂纳多

anauzrmj

anauzrmj1#

您可以使用groupby和一个自定义函数来增加数据:

def data_augment(df):
    new_index = np.arange(df['time_order'].min(), df['time_order'].max()+0.1, 0.1)
    return (df.set_index('time_order')['value']
              .reindex(new_index).interpolate())
    
out = (df.groupby(['metric', 'variable']).apply(data_augment)
         .stack().rename('value').reset_index()[df.columns])

输出:

>>> out
      metric  time_order variable   value
0   3f00d0b5         0.0     var1  0.0350
1   3f00d0b5         0.1     var1  0.0827
2   3f00d0b5         0.2     var1  0.1304
3   3f00d0b5         0.3     var1  0.1781
4   3f00d0b5         0.4     var1  0.2258
..       ...         ...      ...     ...
79  83e7fdd1         1.6     var2  0.0028
80  83e7fdd1         1.7     var2  0.0021
81  83e7fdd1         1.8     var2  0.0014
82  83e7fdd1         1.9     var2  0.0007
83  83e7fdd1         2.0     var2  0.0000

[84 rows x 4 columns]

相关问题