Groupby,agg,在dataframe上应用以创建新的datafram

2024-06-16 08:41:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我显示了数据框的第一行,其中AdminStrata表示国家的省份(数据框包含多个国家):

我将获得以下数据帧/输出:

在实践中,我想找出每个国家和每个AdminStrata的时间序列间隔(及其长度),而不中断(没有NaN值),重点放在“Metric”列上。你知道吗

我已经使用以下代码获得了所需的输出,但是我会以更优雅的方式使用Pandas函数(例如没有for循环)。你知道吗

df_temporal_series = []
for country in df.Country.unique():
    sub_df = df[df.Country == country]
    sub_df = sub_df.groupby(["Datetime", "AdminStrata"]).mean()["Metric"].unstack()
    for adminStrata in sub_df: 
        agged = sub_df[adminStrata].loc[sub_df[adminStrata].first_valid_index():sub_df[adminStrata].last_valid_index()]
        agged = agged.groupby(sub_df[adminStrata].isnull().cumsum()).agg(Start = pd.Series.first_valid_index, Stop = pd.Series.last_valid_index, Length = "count").dropna()
        agged.insert(0, "AdminStrata", adminStrata)
        agged.insert(0, "Country", country)
        df_temporal_series.append(agged)

df_temporal_series = pd.concat(df_temporal_series)
df_temporal_series.reset_index(drop = True, inplace = True)

有可能吗?你知道吗


Tags: 数据dfforindex国家metriccountryseries