繁体   English   中英

如何在 python dataframe 的时间段内生成值?

[英]How to generate values inside a time period in a python dataframe?

我有一个特定周期范围内的一些数据(周期 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},

有一种直接的方法可以用 pythonic 方式实现吗?

提前谢谢你,莱昂纳多

您可以使用groupby和自定义 function 来扩充数据:

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])

Output:

>>> 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM