按ID分组,返回MIN日期并在MIN日期时包含Zipcode

时间:2018-04-13 01:59:32

标签: python pandas dataframe

Dataframe包含:

@media screen and (min-width: 0px) {
    .col-1 {
        width: 8.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-2 {
        width: 16.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-3 {
        width: 25%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-4 {
        width: 33.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-5 {
        width: 41.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-6 {
        width: 50%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-7 {
        width: 58.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-8 {
        width: 66.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-9 {
        width: 75%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-10 {
        width: 83.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-11 {
        width: 91.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-12 {
        width: 100%;
        padding-right: 1rem;
        padding-left: 1rem;
    }
}
@media screen and (max-width: 576px) {
    .col-1-s {
        width: 8.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-2-s {
        width: 16.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-3-s {
        width: 25%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-4-s {
        width: 33.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-5-s {
        width: 41.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-6-s {
        width: 50%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-7-s {
        width: 58.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-8-s {
        width: 66.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-9-s {
        width: 75%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-10-s {
        width: 83.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-11-s {
        width: 91.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-12-s {
        width: 100%;
        padding-right: 1rem;
        padding-left: 1rem;
    }
}
@media screen and (max-width: 768px) {
    .col-1-m {
        width: 8.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-2-m {
        width: 16.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-3-m {
        width: 25%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-4-m {
        width: 33.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-5-m {
        width: 41.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-6-m {
        width: 50%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-7-m {
        width: 58.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-8-m {
        width: 66.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-9-m {
        width: 75%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-10-m {
        width: 83.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-11-m {
        width: 91.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-12-m {
        width: 100%;
        padding-right: 1rem;
        padding-left: 1rem;
    }
}
@media screen and (max-width: 992px) {
    .col-1-l {
        width: 8.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-2-l {
        width: 16.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-3-l {
        width: 25%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-4-l {
        width: 33.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-5-l {
        width: 41.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-6-l {
        width: 50%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-7-l {
        width: 58.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-8-l {
        width: 66.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-9-l {
        width: 75%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-10-l {
        width: 83.33333%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-11-l {
        width: 91.66667%;
        padding-right: 1rem;
        padding-left: 1rem;
    }

    .col-12-l {
        width: 100%;
        padding-right: 1rem;
        padding-left: 1rem;
    }
}

我目前的python pandas代码是:

>> df ID DATE ZIPCODE 196512 1/1/2017 17961 196512 3/1/2016 96512 196512 2/1/2017 34521 196512 9/23/2017 85687 196795 3/2/2017 28978 196795 7/3/2016 98362 196795 9/2/2016 21345 196795 1/1/2015 03452

这段代码可以得到我想要的东西,但是,你可以在我的例子中看到,通过在ID和ZIPCODE上创建一个数据透视表,我必须手动评估我的输出,然后找出每个ID的最早日期与邮政编码MIN日期。

我正在寻找的结果将是:

df1 = pd.pivot_table(df,index=["ID","ZIPCODE"],values=["DATE"],aggfunc=min)

因为我正在寻找每个ID的最早日期和相关的邮政编码。

2 个答案:

答案 0 :(得分:3)

您需要先转换为日期时间格式,然后在drop_duplicates之后使用sort_values

df.assign(DATE=pd.to_datetime(df.DATE)).sort_values('DATE').drop_duplicates('ID')
Out[207]: 
       ID       DATE  ZIPCODE
7  196795 2015-01-01     3452
1  196512 2016-03-01    96512

答案 1 :(得分:3)

这是一种方式。

df['DATE'] = pd.to_datetime(df['DATE'], dayfirst=True)

res = df.loc[df.groupby('ID')['DATE'].idxmin()]

print(res)

#        ID       DATE  ZIPCODE
# 1  196512 2016-01-03    96512
# 7  196795 2015-01-01     3452