Pandas:按时间计算不同分组间的数值比率
解决方法
直接通过以下步骤即可实现需求:
- 提取每个时间步下
type1的数值,构建时间到对应数值的映射关系 - 为每行匹配对应时间的
type1数值,计算当前行数值与该值的比率
示例代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'time': ['t1', 't2', 't3', 't1', 't2', 't3'], 'type': ['type1', 'type1', 'type1', 'type2', 'type2', 'type2'], 'values': ['v1', 'v2', 'v3', 'v4', 'v5', 'v6'] }) # 提取type1的数值,以time为索引建立映射 type1_vals = df[df['type'] == 'type1'].set_index('time')['values'] # 生成比率列:按时间匹配type1数值,拼接成比率格式 df['ratio'] = df.apply(lambda row: f"{row['values']}/{type1_vals[row['time']]}", axis=1) print(df)
输出结果
time type values ratio 0 t1 type1 v1 v1/v1 1 t2 type1 v2 v2/v2 2 t3 type1 v3 v3/v3 3 t1 type2 v4 v4/v1 4 t2 type2 v5 v5/v2 5 t3 type2 v6 v6/v3
如果你的values是数值类型(而非字符串),只需将比率计算改为数值除法:
df['ratio'] = df['values'] / df['time'].map(type1_vals)
内容的提问来源于stack exchange,提问作者Flux Capacitor
相关产品推荐
相关产品推荐

