繁体   English   中英

通过根据唯一 ID 将最小值到最大值排序并附加到 python 中的 DataFrame 来转置多个日期

[英]Transposing Multiple dates by sorting min to max based on unique ID and appending to DataFrame in python

给定数据是

ID 日期
1个 10/20/2019
2个 11/02/2019
3个 12/12/2019
1个 02/06/2019
1个 2018-05-14
3个 2019 年 5 月 13 日
2个 07/20/2018
3个 08/23/2019
2个 2018/06/25

我想要这种格式

ID 日期 1 日期2 日期3
1个 2018-05-14 02/06/2019 10/20/2019
2个 2018/06/25 07/20/2018 11/02/2019
3个 2019-05-13 08/23/2019 12/12/2019

我正在使用 For Loop 在 4,00,000 多个唯一 ID 上实现它并且它很耗时。 有什么简单的方法吗?

我正在使用这段代码:

每个保单编号都有多个日期,我希望它们按最小值到最大值排列在不同列中的一行中,如第二张表中所述。

f= pd.DataFrame()

for i in range(0,len(uni_pol)):
    d=ct.loc[ct["Policy_no"]== uni_pol[I]]
    t=d.sort values ('DATE", ascending=True).T
    df=pd.DataFrame(t)
    a=df. loc['Policy_no' ]
    col=df.columns
    df['Policy_no']= a.loc[ col[0] ]

    for j in range(0, len(col)):
        nn= str(j+1)
        name="Paydt"+nn
        df[name] = df[col[j]]
        CC= col[j]
        df=df.drop([cc], axi5-1)
        j=j+1

    f = f.append(df. loc[' DATE'])

这是一种方法:

按“日期” sort_values 然后groupby并根据日期创建一个列表; 这构建了一个系列。 然后从系列中的列表创建一个 DataFrame:

df['date'] = pd.to_datetime(df['date'])
s = df.sort_values(by='date').groupby('id')['date'].agg(list)
out = pd.DataFrame(s.tolist(), index=s.index, columns=[f'date{i}' for i in range(1,len(s.iat[0])+1)]).reset_index()

Output:

   id      date1      date2      date3
0   1 2018-05-14 2019-02-06 2019-10-20
1   2 2018-06-25 2018-07-20 2019-11-02
2   3 2019-05-13 2019-08-23 2019-12-12

暂无
暂无

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

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