You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换Pandas DataFrame:以国家编码为标识,将metricId转为列?

解决方案:Metrics数据集转宽表(按国家+时间分组)

核心思路

直接通过筛选目标国家的时间范围 + 透视表转换,替代先提取时间再匹配的繁琐操作,一步生成符合要求的宽表。

假设原数据结构

假设你的原始metrics数据集结构如下(metricId存储指标类型,stringValue存国家编码,numericValue存指标数值):

timeComputedmetricIdstringValuenumericValue
2023-02-21 13:28:15.705...countryCodeINNaN
2023-02-21 13:28:15.705...reporting:METRICS_COMPUTATION_DURATIONNaN2282
2023-02-21 13:28:15.705...basic:COUNT_COLUMNSNaN25
2023-02-21 13:28:38.354...countryCodeINNaN
2023-02-21 13:28:38.354...reporting:METRICS_COMPUTATION_DURATIONNaN2765

方法1:用Pandas处理(Python)

import pandas as pd

# 读取原始数据(替换成你的数据读取方式)
# df = pd.read_csv("metrics_data.csv")

# 1. 提取印度(IN)对应的所有时间点
in_time_list = df[(df["metricId"] == "countryCode") & (df["stringValue"] == "IN")]["timeComputed"].tolist()

# 2. 筛选这些时间点的所有指标记录
filtered_df = df[df["timeComputed"].isin(in_time_list)]

# 3. 提取国家编码并合并到主数据
country_info = filtered_df[filtered_df["metricId"] == "countryCode"][["timeComputed", "stringValue"]].rename(columns={"stringValue": "countryCode"})
merged_df = pd.merge(filtered_df[filtered_df["metricId"] != "countryCode"], country_info, on="timeComputed")

# 4. 透视生成宽表
wide_table = merged_df.pivot_table(
    index=["countryCode", "timeComputed"],
    columns="metricId",
    values="numericValue",
    aggfunc="first"  # 同一维度下指标唯一,取第一个值即可
).reset_index()

# 输出结果
print(wide_table)

如果你的原始数据已经直接包含countryCode列(无需从metricId中提取),可以简化为:

filtered_df = df[df["countryCode"] == "IN"]
wide_table = filtered_df.pivot_table(
    index=["countryCode", "timeComputed"],
    columns="metricId",
    values="numericValue",
    aggfunc="first"
).reset_index()

方法2:用SQL处理(适用于Spark SQL/BigQuery等)

SELECT *
FROM (
    SELECT 
        timeComputed,
        metricId,
        numericValue,
        -- 按时间分组提取国家编码
        MAX(CASE WHEN metricId = 'countryCode' THEN stringValue END) OVER (PARTITION BY timeComputed) AS countryCode
    FROM your_metrics_table
)
PIVOT (
    MAX(numericValue) FOR metricId IN (
        'reporting:METRICS_COMPUTATION_DURATION',
        'basic:COUNT_COLUMNS',
        'col_stats:COUNT_NULL:EndCustomerAccount'
    )
)
WHERE countryCode = 'IN'

内容的提问来源于stack exchange,提问作者user4550079

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:24:33